6월, 2023의 게시물 표시

[컴퓨터 보안] 방화벽(firewall) 이란 무엇일까?

이미지
방화벽(firewall) 이란 무엇일까? 방화벽의 특징, 종류 등을 알아보자. 방화벽을 왜 사용할까? 화재가 나면 방화벽을 내려 불이 방화벽 뒤로 오지 못하도록 한다. 컴퓨터, 네트워크 보안 측면에서 방화벽은 기업, 대학교 등 거대한 조직에서 사용하는 네트워크를 외부로부터 공격을 감시하고 보안을 강화해 준다. 방화벽의 목적 1. 내부 에서 외부, 외부에서 내부로 가는 모든 트래픽은 방화벽을 거쳐야만 연결이 된다. 2. 내부 보안 정책에 따라 인증 받은 트래픽만 통과 할 수 있다. 3. 방화벽 시스템은 해킹, 침투하기 힘들어야 한다. 방화벽의 기능 1. IP 주소와 프로토콜 값 : 외부나 내부로부터 접근 가능한 인터넷 서비스의 종류를 결정한다. 2. 응용 프로토콜 : 특정 서비스 요청이 어느 방향으로 흐를지 결정해준다. 3. 사용자 식별 : 사용자의 권한을 지정하여 권한마다 특정 서비스에 접근 허가를 결정한다. 4. 네트워크 활동 : 서비스가 어떻게 사용 될 지를 정의한다. 방화벽의 한계 1. 방화벽을 회피하는 침입은 대처가 어렵다. 2. 외부 공격자와 내통하고 있는 내부 공격자의 공격을 막지 못한다. 3. 무선 랜은 보안이 불완전한데, 무선 랜을 사용하여 내부 네트워크에 접근 할 수 있다. 4. 감염된 노트북 같은 이동 저장 장치가 네트워크에 연결되어 사용 될 수 있다. 네트워크 보안에서 방화벽 하나만 사용하는 것이 아닌 다른 보안 기법들과 함께 사용한다. 방화벽의 종류 1. 패킷 필터링 방화벽 들어오고 나가는 IP 패킷에 미리 정해진 규칙들을 적용하여 그 결과에 따라 전달하거나 제거한다. 주로 내부로 들어오거나 나가는 방향 총 2 방향을 검사하도록 세팅한다. 아래 용어를 사용해서 규칙을 만든다. 출발지 IP 주소 : 패킷이 시작된 시스템 IP 주소 도착지

[컴퓨터 보안] 네트워크 기반 침입 탐지 시스템(NIDS)

네트워크 기반 침입 탐지 시스템(NIDS) 이란? 네트워크 기반 침입 탐지 시스템(NIDS)  1. 네트워 기반 침입 탐지 시스템이란? NIDS는 각각 네트워크의 연결 부위에서 트래픽을 감시한다. 실시간에 가까운 속도로 각각 패킷을 분석하여 침입 패턴을 찾아낸다. 네트워크, 전송, 응용 계층의 프로토콜 침입 패턴도 분석 할 수 있다. HIDS와 차이점은 HIDS는 하나의 호스트에서 사용자나 소프트웨어를 분석하는 반면 NIDS는 네트워크에 존재하는 잠재적 취약점을 가진 시스템으로 보내지는 트래픽을 분석한다. 2. NIDS 센서의 종류 데이터를 모으는 센서는 inline or passive 두가지 모드로 설치 된다. 1. inline 센서 : 네트워크 세그먼트에 삽입되어 삽입된 센서를 직접 통과하는 트래픽만 감지한다. 2. passive 센서 : inline 보다 많이 사용된다. passive 센서는 네트워크 트래픽의 복사본을 감시한다. 무슨 말이냐면 실제 트래픽은 센서를 통과하지 않는다. 3. 이상 탐지 기반 NIDS 나열만 하자면 - 서비스 거부 공격 - 스캐닝 - 웜 4. 오용 탐지 기반 NIDS 나열만 하자면 - Application layer reconnaissance and attacks - Transport layer reconnaissance and attack - Network layer reconnaissance and attacks -Unexpected application services -Policy vialations

[컴퓨터 보안] 호스트 기반 침입 탐지 시스템(HIDS) 이란?

호스트 기반 침입 탐지 시스템(HIDS) 이란? 호스트 기반 침입 탐지 시스템(HIDS)  1. 호스트 기반 침입 탐지 시스템이란? HIDS는 취약하거나 민감한 시스템의 보안 소프트웨어에 레이어를 추가하여 이루어 진다. 예를 들어 데이터 베이스 서버 및 관리 시스템이 있다. HIDS는 의심스러운 동작을 검출 하기 위해 다양한 방법으로 활동을 감시한다. 장점으로는 시스템 외부와 내부 모두 감지를 할 수 가 있다. 2. HIDS가 수집하는 데이터 1. 시스템 호출 추적 : 시스템 프로세스에 의해서 시스템 작동 순서 기록이 남는다. 이 때 HIDS의 데이터에서 확인 한다. 여기서 재밌는게 유닉스, 리눅스는 시스템 호출이 잘되는데 윈도우즈는 특정한 프로시저들은 DLL의 방해를 받아서 문제가 생긴다. 2. 로그 기록 : 운영체제에는 사용자의 활동 정보를 수집하는 회계 소프트웨어가 있다. 로그 기록은 이론상 침입 탐지를 위해서 사용하지만 컴퓨터 보안에서 더욱 사용 된다. 3. 파일의 무결성 체크섬(check sum) : 정기적으로  파일을 검사하고 암호화 된 체크섬을 비교하여 변화된 값이 있는 지 확인 한다. 4. 레지스트리 접근 : 레지스트리에 접근해서 모니터링으로 체크한다. 3. 이상 탐지 기반 HIDS 유닉스나 리눅스 시스템에서 수집된 데이터를 사용하여 회계 기록이나 로그 기록을 사용하여 탐자하며 시스템 호출 추적 기반으로 탐지 한다. 4. 오용 탐지 기반 HIDS 오용 탐지 기반 HIDS는 안티 바이러스 프로그램으로 가장 많이 사용 된다. 악의적인 행동을 파악하여 유명한 바이러스를 탐지한다.

[컴퓨터 보안] 침입 탐지 시스템(IDS, HIDS, NIDS, 분산IDS) 정리

침입 탐지 시스템(IDS, HIDS, NIDS, 분산IDS) 정리 침입 탐지 시스템(IDS) 1. 침입 탐지 시스템(Intrusion Detection System)이란? 시스템 이벤트를 24시간 감시와 분석을 통해 시스템에 불법적인 접근이 있다면 실시간으로 관리자에게 알려주는 서비스.  2.  침입 탐지 시스템(IDS)는 3가지로 이뤄져 있다. 센서(sensor) : 센서는 자료 수집에 사용. 네트워크 패킷, 로그, 시스템 호출 등 정보를 수집 하여 Analyzers에 전송. 분석기(Analyzers) : 하나 이상의 센서나 다른 Analyzer로부터 입력 데이터를 수집. 침입이라고 판단되면 알려준다. UI(User Interface) : IDS의 인터페이스를 사용해서 ID출력 내용을 보거나 시스템을 조절 가능. 3.  침입 탐지 시스템(IDS)는 3가지의 논리적 요소로 구성. - 호스트 기반 침입 탐지 시스템(HIDS) : 하나의 호스트의 특성과 그 안에서 발생하는 이벤트들을 감시 및 탐지 - 네트워크 기반 침입 탐지 시스템(NIDS) : 네트워크 특정 세그먼트에서 관찰되는 네트워크 트래픽을 감시하고 네트워크, 전송, 응용 프로토콜 분석 및 탐지 - 분산(하이브리드) IDS : 센서, 호스트, 네트워크 기반 IDS로부터 오는 정보들을 모두 합쳐 침입을 분석. 4. 분석 방법 침입자를 탐지하기 위해서 2가지 방법을 사용한다. 1. 이상 탐지 : 장기간 수집한 침입자가 아닌 일반 사용자들의 행동 패턴 데이터를 수집한다. 데이터를 기반으로 관찰된 행동이 합법적인 사용자의 행동이라고 판단이라고 생각 할 수 있도록 통계학적인 테스트를 통해 판단한다. 2. 오용 탐지 : 이상 탐지가 정상적인 행동을 탐지 한다면 오용 탐지는 적절한 행동을 정의 한다. 즉 침입자를 판단하기 위해 규칙과 공격 패턴을 정의한다. 자, 이상탐지는 정상적인 행동을 탐지 한다고 했다. 하지만 산업

[Arduino] 아두이노 시리얼 모니터에 값 입력받기

이미지
아두이노 시리얼 모니터에 값 입력받기 시리얼 모니터에 변수나 문자열을 입력 할 수 있다.  데이터 입출력을 위해 시리얼 객체 선언 아두이노 처음 할 때 가장 많이 하는 실수가 통신 셋업을 안해주는 거다. 이러면 시리얼 모니터가 안 뜬다. set up 함수에 꼭 시리얼 객체를 선언을 해줘야 한다. void setup () {   Serial . begin ( 9600 ) ; //초당 9600 비트로 통신 하겠다. } 시리얼 모니터 입력 값 확인하기 입력 값을 받기 전에 꼭 available() 함수를 사용 해야한다. 그래야 쓰레기 값이 안들어 온다. void loop () {   String str = "" ;   if ( Serial . available () > 0 ) // 입력 값이 0 보다 크면   {     str = Serial . read () ; //문자열 읽어 오기     str = Serial . readStringUntil () ; // 문자열 가져오기 // \n(공백)을 만날 때 까지   } } 시리얼 모니터 입력 값 확인 함수 입력 값을 받기 전에 꼭 available() 함수를 사용 해야한다. 그래야 쓰레기 값이 안들어 온다. void loop () {   char chr = "" ;   String str = "" ;   int data;   if ( Serial . available () > 0 ) // 입력 값이 0 보다 크면   {     chr = Serial . read () ; //변수 읽어 오기     str = Serial . readString () ; //문자열 읽어 오기     str = Serial . readStringUntil () ; // 문자열 가져오기 // \n(공백)을 만날 때 까지  

[Arduino] 아두이노 시리얼 모니터 값 출력하기

이미지
아두이노 시리얼 모니터 값 출력하기 시리얼 모니터에 변수나 문자열을 출력 할 수 있다. 데이터 입력을 위한 시리얼 객체 선언  아두이노 처음 할 때 가장 많이 하는 실수가 통신 셋업을 안해주는 거다. 이러면 시리얼 모니터가 안 뜬다. set up 함수에 꼭 시리얼 객체를 선언을 해줘야 한다. void setup () {   Serial . begin ( 9600 ) ; //초당 9600 비트로 통신 하겠다. } 시리얼 모니터에 출력  void loop () {   int data = 5 ;   Serial . print ( data ) // 시리얼 모니터 화면에 출력   Serial . println ( data ) // 시리얼 모니터 화면에 출력 후 줄 바꿈 }

[Arduino] 아두이노 적외선 수신기(IR Receiver) 사용하기

이미지
아두이노 적외선 수신기(IR Receiver) 사용하기 적외선 수신기는 적외선 리모컨 or 적외선 송신기에서 보내는 신호를 받는다. 리모컨으로 TV, 에어컨, 선풍기 등 제어하는 것 처럼 사용 할 수 있다. 회로도 적외선 수신기 그림이 이상하긴 하지만 회로도 대로 연결 하면 된다. (아무리 찾아도 적외선 수신기 그림이 저거 밖에 없다.) 코드 구현 리모컨이 누른 IR 수신 정보를 출력 해준다. 실행이 안되면 <IR.H>를 추가해야한다. #include <IR.h> //적외선 수신기 사용   #define IR_PIN 13 unsigned long last = millis () ; IRrecv irrecv ( IR_PIN ) ; decode_results decResult; void setup () {   Serial . begin ( 9600 ) ;   irrecv . enableIRIn () ; } void loop () {   if ( irrecv . decode ( &decResult ) == true )   {     Serial . println ( decResult . value , HEX ) ;     Serial . println ( getDecodetype ( decResult . decode_type )) ;     if ( millis () - last > 250 )     {       last = millis () ;       irrecv . resume () ;     }   } } String getDecodetype ( int type) {   String szType= "Type : " ;   switch ( type )   {     case NEC: szType . concat ( "NEC" ) ;     break ;     case

[Arduino] 아두이노 서보(servo) 모터 사용하기

이미지
아두이노 서보(servo) 모터 사용하기 서보모터는 자체적으로 속도 조절을 할 수 있으며 자신이 얼마나 회전했는지 센싱하고 입력 받은 값을 회전 시켜준다. 산업에서 많이 사용되는 모터 중 하나다. 0 ~ 180도 회전을 한다. 회로도 검은색 : GND 빨간색 : 5v 노란색 or 파란색 : 10번 핀 코드 구현 서보 모터를 0부터 180 까지 회전 시킨 후 180도가 되면 0도 로 다시 역회전 시킨다. #include <Servo.h> //서보 모터 라이브러리 포함 #define SERVO_PIN 10 Servo servo; // 서보모터 사용 int pos = 0 ; void setup () {   servo . attach ( SERVO_PIN ) ; // 서보모터 핀 초기화 } void loop () {   for ( pos = 0 ; pos < 180 ; pos += 1 ) // 0 -> 180각도 까지 0.02초 마다 1도씩 회전   {     servo . write ( pos ) ;     delay ( 20 ) ;   }   for ( pos = 180 ; pos>= 1 ; pos-= 1 ) 180 도가 되면 0 도 까지 반대로 회전   {     servo . write ( pos ) ;     delay ( 20 ) ;   } }

[Arduino] 아두이노 RGB LED 사용하기

이미지
아두이노 RGB LED 사용하기 기본 led는 빨간색, 초록색, 흰색, 노란색 등 한가지 색만 나타낸다. 하지만 RGB Led는 Red Led, Green Led, Blue Led 3개가 함께있는 센서다. RGB값을 조합하여 여러가지 색상을 표현 할 수 있으면 밝기 값도 조절이 가능다. 회로도 각각 선의 색깔이 R, G, B 센서를 제어한다. 코드 구현 1초에 한번씩 여러가지 색상을 출력한다.. #define R_PIN 8 #define G_PIN 9 #define B_PIN 10 void setup () {   Serial . begin ( 9600 ) ;   pinMode ( R_PIN, OUTPUT ) ;   pinMode ( G_PIN, OUTPUT ) ;   pinMode ( B_PIN, OUTPUT ) ; } void loop () {   SetColor ( 255 , 0 , 0 ) ; // 빨강   SetColor ( 0 , 255 , 0 ) ; //연두   SetColor ( 0 , 0 , 255 ) ; //파랑   SetColor ( 255 , 255 , 0 ) ; //노랑   SetColor ( 80 , 0 , 80 ) ; //보라 } void SetColor ( int r , int g , int b) {   analogWrite ( R_PIN, r ) ; // rgb 색상 출력   analogWrite ( G_PIN, g ) ;   analogWrite ( B_PIN, b ) ;   delay ( 1000 ) ; }

[Arduino] 아두이노 조이스틱 사용하기

이미지
아두이노 조이스틱 사용하기 조이스틱은 X, Y, Z 값을 얻을 수 가 있다. X, Y 는 아날로그 값. Z 는 디지털 값(0 , 1) 조이스틱을 활용해서 미니카를 움직일 수 있다. 회로도 그림 잘 보고 연결 해야 한다. 그림이 반전 되어 있을 수 도 있으니 GND 위치 확인하고 연결. 코드 구현 조이스틱의 x, y, z축 값을 출력하는 코드다. #define X_PIN A0 #define Y_PIN A1 #define SW_PIN 2 void setup () {   pinMode ( SW_PIN, INPUT_PULLUP ) ;   pinMode ( X_PIN, INPUT ) ;   pinMode ( Y_PIN, INPUT ) ;   Serial . begin ( 9600 ) ; } void loop () {   int x = analogRead ( X_PIN ) ;   int y = analogRead ( Y_PIN ) ;   int z = digitalRead ( SW_PIN ) ;   if ( !z ) // 스위치가 안 눌렸으면 x, y, z 값 출력   {     Serial . print ( x ) ;     Serial . print ( ", " ) ;     Serial . print ( y ) ;     Serial . print ( ", " ) ;     Serial . println ( z ) ;   } }

[Arduino] 아두이노 써미스터(Thermistor) 온도 센서 제어하기

이미지
아두이노 써미스터(Thermistor) 온도 센서 제어하기 써미스터 온도 센서는 열에 민감한 저항이다. 또한 써미스터가 구한 저항 값을 우리가 사용하는 온도로 바꿔줘야 한다. 회로도 저항은 100k를 사용 하면 된다. 코드 구현 1초마다 온도 값을 불러온다. 코드 실행이 안되면 <Thermistor.h> 라이브러리를 추가 해주면 된다. //센서 라이브러리 #include <Thermistor.h> // 센서 연결 선언 Thermistor temp ( A0 ) ; void setup () {   Serial . begin ( 9600 ) ; } void loop () {   int temp = temp . getTemp () ;   Serial . print ( temp ) ;   Serial . println ( "℃" ) ;   delay ( 1000 ) ; }

[Arduino] 아두이노 조도센서(Photoresistor) 사용하기

이미지
아두이노 조도센서(Photoresistor) 사용하기 조도 센서는 빛의 밝기에 따라 저항 값이 변하며 출력을 해주는 센서다. 빛이 약할 수록 저항 값이 낮다. 회로도 저항은 10k를 사용 하면 된다. 코드 구현 1초마다 빛의 밝기 값을 출력한다. 손가락으로 조도 센서를 가리게 되면 밝기가 낮아지니 값이 낮게 나온다. #define PHO_PIN A0 void setup () {   pinMode ( PHO_PIN, INPUT ) ;   Serial . begin ( 9600 ) ; } void loop () {   String Temp = "Value : " ;   Temp += analogRead ( PHO_PIN )   Serial . println ( Temp ) ;   delay ( 1000 ) ; }

[Arduino] 아두이노 가변저항으로 LED 밝기 조절하기

이미지
아두이노 가변저항으로 LED 밝기 조절하기 가변 저항은 스위퍼를 돌려서 0 ~ 1023 값을 받을 수 있다. 가변 저항으로 얻은 값으로 LED 밝기를 조절 해 보자. 회로도 저항은 220옴을 사용하면 된다. 코드 구현 가변 저항 값이 커질 수록 LED 밝기가 올라간다.  map함수 = 가변저항 최대값(1023) / LED 최대값(255)의 근사치다. #define LED_PIN 11 void setup ( ) {   pinMode ( LED_PIN, OUTPUT ) ; } void loop ( ) {   int readVal= analogRead ( A0 ) ;   readVal = map ( readVal, 0 , 1023 , 0 , 255 ) ; //가변저항 값 -> led 값으로 변환   analogWrite ( LED_PIN, readVal ) ; // led를 아날로그 값으로 출력 }

[Arduino] 아두이노 DC 모터 제어하기(L298N)

이미지
아두이노 DC 모터 제어하기(L298N)  DC 모터는 PWM((Pulse Width Modulation)을 이용해서 0 ~ 255 까지 속도를 제어 할 수 있다. 낮을 수록 회전수가 적어진다. 또 한 DC 모터를 제어하기 위해서 드라이버가 필요한데 회로도에 나와있는 L298D다. L298D는 DC모터와 Servo 모터를 제어 할 수 있다. 회로도 DC모터가 회전을 하지 않을 때 1. 회전 속도가 낮아 안 돌아감 -> 손으로 한번 돌려 봐야한다. 2. DC모터의 노란색, 초록색 선을 반대로 연결 -> 바꿔서 연결 해 볼 것. 코드 구현 DC모터를 255 속도로 1초마다 반대로 회전 하도록 하는 코드 // 모터 회전력 제어 #define EN_PIN 11 //모터 제어 핀 #define IN1_PIN 10 #define IN2_PIN 9 boolean bReverse = false ; void setup () {   pinMode ( EN_PIN, OUTPUT ) ;   pinMode ( IN1_PIN, OUTPUT ) ;   pinMode ( IN2_PIN, OUTPUT ) ; } void loop () {   setMotor ( 255 , bReverse ) ;   delay ( 1000 ) ;   bReverse = !bReverse; // 반향 반전   delay ( 1000 ) ; } void setMotor ( int nSpeed , boolean bReverse) {   analogWrite ( EN_PIN, nSpeed ) ; // 속도 설정   if ( bReverse == 0 )   {     digitalWrite ( IN1Pin, HIGH ) ;     digitalWrite ( IN2Pin, LOW ) ;   }   else // 반대로 회전   {     digitalWrite ( IN1Pin, LOW ) ;  

[Arduino] 7세그먼트 사용해서 숫자 카운트하기

이미지
[Arduino] 7세그먼트 사용해서 숫자 카운트하기 내용 1. 7세그먼트 ON, OFF  2. 7세그먼트 0 ~ 9 출력하기 회로도 참 복잡하다 세그먼트 on, off하기 1초마다 세그먼트가 on, off 하는 코드다. on을 하면 세그먼트에 8이 나올 것이며 off를 하면 아무것도 나오지 않는다. #define A_PIN 2 #define DP_PIN 9 void setup () {   for ( int i = A_PIN; i <= DP_PIN; i++ ) //세그먼트 셋업     pinMode ( i, OUTPUT ) ; } void loop () {   OnOff ( 1 ) ;   delay ( 1000 ) ;   OnOff ( 0 ) ;   delay ( 1000 ) ; } void OnOff ( bool bOn) {   for ( int i=A_PIN; i<=DP_PIN; i++ ) //전부 끄기 or 켜기     digitalWrite ( i, bOn ) ; } 제목 2 1초 간격으로 세그먼트 0 ~ 9 까지 출력 #define A_PIN 2 #define DP_PIN 9 //LED 숫자 #define NUM_0 1 , 1 , 1 , 1 , 1 , 1 , 0 #define NUM_1 0 , 1 , 1 , 0 , 0 , 0 , 0 #define NUM_2 1 , 1 , 0 , 1 , 1 , 0 , 1 #define NUM_3 1 , 1 , 1 , 1 , 0 , 0 , 1 #define NUM_4 0 , 1 , 1 , 0 , 0 , 1 , 1 #define NUM_5 1 , 0 , 1 , 1 , 0 , 1 , 1 #define NUM_6 0 , 0 , 1 , 1 , 1 , 1 , 1 #define NUM_7 1 , 1 , 1 , 0 , 0 , 0 , 0 #define

[Arduino] 아두이노 푸시 버튼으로 LED 제어하기

이미지
아두이노 푸시 버튼으로 LED 제어하기 버튼을 누르면 LED에서 빛이 나오는 예제 회로도 저항은 220옴을 사용하면 된다. 코드 구현 푸시 버튼 핀 모드를 INPUT_PULLUP으로 구현을 했다. 누르고 있으면 LED 버튼 ON 누르지 않으면 OFF #define PUSH_PIN 9 #define LED_PIN 10 void setup () {   pinMode ( PUSH_PIN, INPUT_PULLUP ) ;   pinMode ( LED_PIN, OUTPUT )   Serial . begin ( 9600 ) ; } void loop () {   int value = digitalRead ( PUSH_PIN ) ;   Serial . println ( value ) ;   if ( value == 0 ) // 버튼이 눌리고 있으면     digitalwrite ( LED_PIN, HIGH )   else     digitalwrite ( LED_PIN, LOW ) }