반응형 분류 전체보기289 Snort 규칙 생성기 동작 과정 -규칙 파일 : Snort 규칙은 텍스트 기반으로 되어 있으며 종류별로 서로 다른 그룹으로 분류되어 있다. 과정 설명 snort.conf 파일 확인 Snort 실행과 동시에 snort.conf 파일의 'Step 4-Cstomize your ruleset' 부분에서 지정한 규칙 파일을 불러들인다. ParseRulesFile() 함수 호출 규칙 파일을 읽는 작업을 실행한다. (함수 정의 : parser.c | 함수 호출 : snort.c) 3차원 연결리스트 생성 마지막으로 Snort는 불러들인 규칙을 파싱해서 연결리스트를 생성한다. 2010. 11. 30. Snort 전처리기 -패킷은 탐지 엔진까지 가기 전에 전처리기를 거친다. -전처리기는 패킷이 탐지 엔진에 도달하기 전에 패킷에 대한 경고하거나 수정하거나 버리기 위하여 사용한다. frag2 전처리기 -수많은 패킷이 분할되어 전송 되는 경우, 분할된 패킷을 재조합하는데 상당한 메모리와 자원이 필요하고, IDS 서버가 많은 부하를 받고 있다면 일부 패킷을 캡처하지 못 할 수 있기 때문에 IDS 서버의 성능이 떨어지게 된다. ※단 하나의 분할 패킷이라도 캡처하지 못한다면 IDS는 서명 비교를 제대로 할 수 없다. -따라서, Snort는 frag2 전처리기를 사용하여 분할된 패킷이 탐지 엔진에 도달하기 전에 재조합하여 Snort가 서명비교를 개별 패킷이 아닌 전체 세션에 적용할 수 있도록 한다. 또한, frag2 전처리기는 분할 .. 2010. 11. 30. Snort 패킷 디코딩 과정 과정 설명 NIC promiscuous 모드 설정 Snort가 실행되면 NIC는 libpcap에 의해 promiscuous 모드로 설정된다. 패킷 복사 promiscuous로 설정된 Snort 서버의 NIC는 허브를 지나가는 패킷을 캡처해서 네트워크 드라이버로 복사한다. ProcessPacket() 함수 호출 lipcap 라이브러리는 무한 루프를 돌면서 패킷을 기다리다가 패킷을 받을 경우 ProcessPacket()함수를 실행한다. (decode.c) DecodeEthPkt() 함수 호출 ProcessPacket 함수는 이더넷 프레임을 디코딩하는 DecodeEthPkt 함수를 호출한다. DecodeIP() 함수 호출 DecodeEthPkt 함수 내에서는 IP 프로토콜을 디코딩하는 DecodeIP 함수를 .. 2010. 11. 30. Snort.conf 설정 (/etc/snort/snort.conf) 내용 설명 var HOME_NET 내부 네트워크 주소를 설정한다. 단일 아이피 주소 또는 전체 서브넷 주소를 가진다. ex) 192.168.1.0/24 var EXTERNAL_NET 외부 네트워크 주소를 설정한다. any로 정의하면 외부 네트워크에서 유입되는 모든 트래픽을 받는다. 기본 값인 any로 사용하는 것이 좋다. 2010. 11. 30. Snort 시스템 보호 내용 설명 불필요한 서비스 제거 Telnet, Berkeley R, FTP, NFS, NIS와 같은 서비스를 중지하고 불필요한 서비스를 실행하고 있지 않은지 확인한다. 시스템 무결성 유지 TripWire 또는 AIDE,Samheim 등을 사용하여 시스템 무결성을 유지한다. 사용하는 서비스를 방화벽 또는 TCP Wrapper로 보호 SSH, Mysql 등의 서비스는 나름대로의 취약점이 존재하기 때문에 방화벽(IPTables 등) 또는 TCP Wrapper로 보호하고 TCP Wrapper로 보호가 불가능한 Apache 같은 서비스는 보안을 최대한 고려한 설정을 한다. 데이터를 암호화하고 공개키 인증을 사용 공개키 인증을 OpenSSH에서만 활성화하는 것이 아닌 Apache 등의 서비스에서도 Apache-SS.. 2010. 11. 30. 유용한 Snort 추가 프로그램 프로그램 URL 설명 SnortSnarf www.silicondefense.com/software/snortsnarf Silicon Defense에서 만든 Snort 분석기, 출력이 HTML이다. Snortplot.php www.snort.org/dl/contrib/data_analysis/snortplot.pl 공격을 그래픽으로 표시해 주는 Perl 스크립트 Swatch swatch.sourceforge.net 실시간 syslog 모니터로서 e메일을 통해 실시간 경고를 전송한다. ACID acidlab.sourceforge.net The Analysis Console for Intrusion Databases의 약자다. Snort의 로그를 분석한다. 이 프로그램이 동작하려면 PHP, Apache, Sn.. 2010. 11. 30. Snort 구성 요소 구성 요소 설명 패킷 캡처/디코드 엔진 먼저, Snort는 libpcap 라이브러리를 통해 네트워크 트래픽을 캡처하고 디코드 엔진은 패킷을 분석하여 링크-계층 프로토콜용 패킷 구조를 채운다음 TCP와 UDP 포트와 같은 상위-계층 프로토콜용 패킷 구조를 채운다. 전처리 플러그인 디코드 엔진을 거친 다음 패킷은 전처리기로 전송되는데 전처리기는 패킷이 탐지엔진에 도착하기 전에 패킷을 검사하고 조작한다. 각 전처리기는 패킷의 내용을 검사하고, 경고를 보내고, 수정하는 등 작업을 수행한다. 탐지 엔진 전처리기 플러그인을 거친 다음 패킷은 탐지 엔진으로 전송된다. 탐지 엔진은 각 패킷을 간단한 검사를 통해 규칙파일의 항목과 비교한다. 탐지 플러그인은 패킷에 대한 추가 탐지 기능을 제공한다. 규칙에 들어 있는 각 .. 2010. 11. 30. Snort 빌드 configure 옵션 옵션 설명 --enable-debug 디버깅 옵션을 활성화한다. (개발자 전용) --with-snmp SNMP 경고 코드를 활성화한다. --enable-smbalerts SMB 경고 코드를 활성화한다. 이 기능은 내부에서 popen() 콜을 실행하기 때문에 보안에 취약하다. 따라서 주의해서 사용해야한다. --enable-flexresp "Flexible Response"(세션 스나이핑) 코드를 활성화한다. 이 기능을 사용하면 특정 규칙에 일치하는 악성 연결을 IP 레벨에서 끊을 수 있다. 이 기능은 libnet-liblary가 필요하다. --with-mysql=DIR MySql을 지원한다. ACID에서 MySQL을 사용하려면 이 옵션을 켜야 한다. --with-odbc=DIR ODBC을 지원한다. ACI.. 2010. 11. 30. Tomcat & JDK 설치 후 설정 1. 환경 변수 설정 CATALINA_HOME 톰캣 설치 경로 JAVA_HOME JDK 설치 경로 PATH $JAVA_HOME\bin CLASSPATH .;$JAVA_HOME\lib\tools.jar;$JAVA_HOME\lib\servlet-api.jar 2. 톰캣 설정 (1)web.xml (톰캣 설치 경로\conf\web.xml) ①invoker로 검색 후 을 감싸는 주석 제거 ②다시 invoker로 검색 후 을 감싸는 주석 제거 (2)server.xml (톰캣 설치 경로\conf\server.xml) ①로 검색 후 바로 위에 추가 3. JDK 설정 (1)복사 톰캣 설치 경로\common\lib\servlet-api.jar ⇨ JDK 설치 경로\lib\servlet-api.jar 4. EditPlus .. 2010. 11. 27. 조건부 점프 명령어 플래그 값에 따른 점프 명령어 예시 설명 jz jz L1 ZF 값이 1이면 해당 레이블로 이동한다. jnz jnz L1 ZF 값이 0이면 해당 레이블로 이동한다. jc jc L1 CF 값이 1이면 해당 레이블로 이동한다. jnc jnc L1 CF 값이 0이면 해당 레이블로 이동한다. jo jo L1 OF 값이 1이면 해당 레이블로 이동한다. jno jno L1 OF 값이 0이면 해당 레이블로 이동한다. js js L1 SF 값이 1이면 해당 레이블로 이동한다. jns jns L1 SF 값이 0이면 해당 레이블로 이동한다. jp jp L1 PF 값이 1이면 해당 레이블로 이동한다. jnp jnp L1 PF 값이 0이면 해당 레이블로 이동한다. jcxz jcxz L1 CX 값이 0이면 해당 레이블로 이동한다.. 2010. 11. 27. 부울 명령어 명령어 예시 설명 and and eax,ebx 피연산자를 AND 연산한다. or or eax,ebx 피연산자를 OR 연산한다. xor xor eax,ebx 피연산자를 XOR 연산한다. not not eax 피연산자의 비를 모두 반전시킨다. (1의 보수 값) test test eax,ebx 피연산자를 AND 연산한다. 플래그는 설정되지만 피연산자는 수정되지 않는다. 2010. 11. 27. 연산자 연산자 예시 설명 offset mov esi,OFFSET 변수명 이 연산자를 포함하는 세그먼트의 시작으로부터의 변수의 거리를 반환한다. ptr mov eax,WORD PTR 변수명 변수의 선언된 크기를 바꾸어 사용할 수 있게 한다. type mov eax,TYPE 변수명 변수 또는 배열 원소의 크기를 반환한다. lengthof mov eax,LENGTHOF 변수명 배열의 원소 개수를 반환한다. sizeof mov eax,SIZEOF 변수명 배열의 초기값이 설정된 바이트 수를 반환한다. typedef 자료형명 TYPEDEF PTR word 사용자 정의 자료형을 만든다. uses 프로시저명 PROC uses ecx esi 해당 프로시저 내에서 수정되는 레지스터의 이름을 열거하여 프로시저 실행이 끝나면 레지스.. 2010. 11. 27. 기본 명령어 명령어 예시 설명 inc inc eax 피연산자에서 1을 더한다. dec dec eax 피연산자에서 1을 뺀다. add add eax,ebx 소스 피연산자를 같은 크기의 목적 피연산자에 더한다. sub sub eax,ebx 목적 피연산자를 같은 크기의 소스 피연산자로 뺀다. neg neg eax 피연산자를 2의 보수로 변환하여 부호를 바꾼다. cmp cmp eax,ebx 목적 피연산자를 같은 크기의 소스 피연산자로 뺀다. 플래그는 설정이 되지만 피연산자는 수정되지 않는다. (ZF, CF) lea lea edi,esi 소스 피연산자의 유효 주소를 계산하여 목적 피연산자에 복사한다. jmp jmp L1 해당 레이블로 무조건 이동시킨다. loop loop L1 ECX 값이 0이 될 때까지 해당 레이블로 이동시.. 2010. 11. 27. 자료형 자료형 설명 BYTE 부호없는 8비트 변수 SBYTE 부호있는 8비트 변수 WORD 부호없는 16비트 변수 SWORD 부호있는 16비트 변수 DWORD 부호없는 32비트 변수 SDWORD 부호있는 32비트 변수 QWORD 64비트 변수 TBYTE 80비트 변수 REAL4 4바이트(32비트) 실수 변수 REAL8 8바이트(64비트) 실수 변수 REAL10 10바이트(80비트) 실수 변수 2010. 11. 27. 어셈블리어 고급언어 vs 저급 언어 응용형태 고급언어 저급언어 중대형 소프트웨어 많은 부분의 코드를 쉽게 체계화하고 유지, 보수가 쉽다. 형식을 갖춘 구조가 없어 프로그래머가 인위적으로 구조를 만들어주어야 한다. 하드웨어 장치 드라이버 하드웨어를 직접 제어할 수 없는 경우가 많아 까다로운 코딩 기술이 사용되어야하기 때문에 유지, 보수가 힘들다. 하드웨어 제어를 쉽게 할 수 있고 프로그램의 길이가 짧고 정리가 잘 된 경우 유지, 보수가 쉽다. 다양한 종류의 컴퓨터 시스템에서 작동되는 소프트웨어 대체로 이식성이 높아 약간의 수정만으로 재사용이 가능하다. 각 컴퓨터 시스템에 적절하도록 프로그램을 재작성 해야함으로 유지, 보수가 힘들다. 1.어셈블리 언어의 특징 ①기계어를 기호화한 기호식 언어이다. ②기계어와 기호가 1:.. 2010. 11. 27. 플래그 CPU의 현재 상태나 연산 결과와 관련된 정보를 보여준다. 각 비트 위치는 각각의 이름이 주어져 있다. 다음 페이지 표에는 8086/8088 플래그 레지스터의 비트 위치를 보이고 있다. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ✖ ✖ ✖ ✖ O D I T S Z ✖ A ✖ P ✖ C O=Overflow D=Direction I=Interrupt T=Trap S=Sign Z=Zero A=Auxiliary Carry P=Parity C=Carry ✖=undefined 1.제어 플래그 방향(direction : DF),인터럽트(Interrupt : IF),트랩(Trap : TF)플래그로 구성되며 CPU의 작동을 제어하기 위한 플래그이다. 플래그 종류 기능 방향 플래그 (DF) MOV.. 2010. 11. 27. 레지스터 레지스터는 CPU 바로 안에 있는 고속 저장 장소이며 일반 메모리보다 훨씬 빠른 속도를 접근되도록 설계되었다. 레지스터는 8개의 범용 레지스터와 6개의 세그먼트 레지스터, 프로세서 상태 플래그 레지스터와 명령어 포인터가 있다. 1.범용 레지스터 범용 레지스터는 계산과 데이터 전송에 주로 사용된다. 각 레지스터는 하나의 32비트 값이나 두 개의 16비트 값으로 다룰 수 있다. 어떤 레지스터의 일부분은 8비트 값으로 다룰 수 있다. 예를 들어 32비트 EAX레지스터의 16비트 하위 반은 AX라는 이름을 갖고 AX 레지스터의 8비트 상위 반은 AH, 하위 반은 AL이라는 이름을 갖는다. 32비트 16비트 8비트(상) 8비트(하) EAX AX AH AL EBX BX BH BL ECX CX CH CL EDX DX.. 2010. 11. 27. IA-32 프로세스 구조 IA-32프로세서는 보호 모드, 실제 주소 모드, 시스템 관리 모드의 세 가지 주요 동작모드를 갖는다. 가상 8086 모드는 보호모드의 특별한 경우이다. 동작모드 설명 보호 모드 모든 명령어와 특징을 사용할 수 있는 프로세서의 고유한 상태이다. 프로그램은 세그먼트라고 하는 분리된 메모리 영역이 주어지며 프로세서는 지정된 세그먼트 바깥의 메모리를 참고하는 것을 방지한다. 가상 8086 모드 보호 모드에서 프로세서는 MS-DOS 프로그램과 같은 실제 주소 모드 소프트웨어를 안전한 멀티태스킹 환경에서 직접 실행할 수 있다. 바꾸어 말하면 MS-DOS 프로그램에 이상이 있거나 데이터를 시스템 영역에 쓰려고 할 때에 동시에 수행되는 다른 프로그램에 영향을 주지 않을 것이다. 실제 주소 모드 다른 모드로 전환하는 .. 2010. 11. 27. 메모리 (Memory) 1. RAM (1)DRAM (Dynamic RAM) : 미소한 콘덴서에 전하를 축적함으로써 정보를 기억한다. 일정시간마다 기억 내용을 다시 재생해주는 재생회로가 필요하다. 전력소모가 작고 칩당 기억용량이 매우 크므로 고밀도화를 이룰 수 있으나 임의의 시점에서 리드와 라이트가 불가능하므로 주로 대용량의 기억장치 구성에 적합하다. (2)SRAM (Static RAM) : 전원 공급이 유지되는 한 저장 내용을 계속 기억하는 RAM 으로 제어가 간단하며 고속이므로 소용량의 기억장치 구성에 적합하다. 특징으로는 플립플롭 논리 게이트에 의한 기억 소자로 회로가 복잡하며 기억밀도가 작고 읽기 쓰기를 고속으로 실행할 수 있다. 또한 DRAM처럼 재생할 필요가 없다. 2.ROM (1)MASK ROM : 공장에서 대량 주.. 2010. 11. 27. 시스템의 기동 순서(Windows) ①CPU는 롬 바이오스 내의 초기화 프로그램으로 점프한다. 부트스트랩 로더라 불리는 프로그램이 시작 드라이브로 지정된 드라이브로부터 부트 레코드를 가져와 메모리에 보관한다. 부트 레코드는 장착되자마자 실행되는 프로그램을 가지고 있다. 이 프로그램은 io.sys, msdos.sys를 차례로 메모리에 보관한다. 마지막으로 메모리에 저장되는 프로그램은 MS-DOS 명령처리 프로그램인 command.com이다. ②command.com의 상주 부분은 항상 메모리에 남아 있다. 이는 오류 메시지를 발생시키며 Ctrl+Break나 긴급한 오류를 처리하는 루틴들을 가지고 있다. 비상주 부분은 램 메모리 상위 부분에 장착되어 키보드에서 입력되는 명령을 해석한다. ③다음으로 config.sys 파일을 실행하는데 이 파일은.. 2010. 11. 27. 이전 1 ··· 7 8 9 10 11 12 13 ··· 15 다음 반응형