외로운 Nova의 작업실

정보보안기사 실기 - 4(침해사고 분석 및 대응) 본문

Certification/정보보안기사

정보보안기사 실기 - 4(침해사고 분석 및 대응)

Nova_ 2023. 5. 8. 13:45

- 침입탐지 시스템(snort)

스노트는 1998년 마틴 로시에의해 개발되었고 패킷 스니퍼, 패킷 로거, 네트워크 IDS/IPS로 이루어져있습니다.

 

- snort 룰 설정

스노트는 룰 헤더로 무엇을 탐지할 것인지 결정하고 룰 바디로 어떻게 탐지할 것인지 결정합니다.

 

<룰 헤더>

예시로 알아보겠습니다.

#모든 tcp ip , 모든 포트에서 1.1.1.1:80으로 가는 패킷들을 감지합니다.
alert tcp any any -> 1.1.1.1 80

#1.1.1.1:80과 2.2.2.2:80이 서로 통신하는 패킷을 감지합니다.
log tcp 1.1.1.1 80 <> 2.2.2.2 80

#외부와 내부가 서로 통신하는 패킷을 감지합니다. $변수는 snort.conf 파일에 정의합니다.
log tcp $EXTERNAL_NET any <> $HOME_NET 80

 

<룰 바디>

아래는 바디에서 사용할 수 있는 옵션들입니다.

msg : alert 발생시 사용한 이벤트 명

classtype : rule에대한 이벤트 유형 정보

prioirity : 우선순위(위험도)

content : 페이로드에서 검사할 문자열 지정(text, binary)

offset : 페이로드에서 content 패턴을 검사할 시작 위치(0부터시작)

depth : offset부터 몇 바이트까지 검사할 것 인지 지정

distance : 이전 content 패턴에 매칭된경우, 이후 몇바이트 떨어진 위치에서 다음 content를 검사할 것인지 지정

withine : distance부터 몇 바이트 범위내에서 검사할 것인지 지정

nocase : 페이로드 검사 시 대/소문자를 구분하지 않음

 

<offset, depth에 대한 이해>

 

<distance, within 이해>

 


<PCRE 옵션>

문자열 탐지의 유연성을 같도록 perl기반의 정규표현식 문법을 지원합니다. /기호사이에 정규표현식을 입력합니다. 아래는 예시입니다.

 

<http 관련 옵션>

http 요청중 어디부분을 검사할건지 정할 수 있습니다.

아래는 method 부분을 검사해서 "GET" 문자열을 검사하는 snort 문입니다.

 

<이벤트 제한 관련 옵션>

이벤트가 발생할때마다 알림을 주지않고 특정 조건을 만족해야 알림을 주는 옵션이 있습니다.

limit : 매 s 초동안 c번째 이벤트까지 action을 수행합니다.

threshold : 매 s초동안 c번째 이벤트마다 action을 수행합니다.

both : 매 s초동안 c번째 이벤트 시 한번 action을 수행합니다.

 

- snort 실습

<FTP root 로그인 시도/성공 탐지>

FTP root 로그인을할때 패킷에 USER 명령이후 root 가 평문으로 전달되는 것을 이용하여 탐지합니다.

<telnet root 로그인 성공 탐지>

root 로그인이 성공하면 [root@~]# 이 평문으로 전달되는 것을 이용합니다.

임의의 문자(.)이 0개 이상(*) 포함 되어있고 그다음에 #을 포함하는 문자열을 검사합니다.

 

<telnet 로그인 무차별대입, 딕셔너리 공격 탐지>

login 실패시 Login incorrect가 패킷으로 전달되는 특성을 이용합니다.

 

<FTP 로그인 무차별대입, 딕셔너리 공격 탐지>

login 실패시 Login incorrect가 패킷으로 전달되는 특성을 이용합니다.

 

<SSH 로그인 무차별 대입, 딕셔너리 공격 탐지>

login할떄 SSH-2.0 과 같은 문자열이 패킷에 있는 특성을 이용합니다.

 

<HTTP GET Flooding 공격 탐지>

1초에 100번 get 요청을 하는지 탐지합니다.

 

<UDP/ICMP Flooding 공격 탐지>

1초에 5번 요청을 하는지 탐지합니다.

 

- 비정상 패킷 탐지

비정상 패킷은 제대로 처리하지 못하는 IDS/IPS또는 방화벽을 우회하거나 장애나 오류가 발생하도록 하기위한 목적으로 사용합니다. 비정상 패킷들은 아래와 같습니다.

  • 인터넷 구간의 사설 IP :  (10.0.0.0~10.255.255.255 , 172.16.0.0 ~ 172.31.255.255 , 192.168.0.0- ~ 192.168.255.255)
  • 출발지와 목적지가 동일한 IP
  • 비정상 TCP 패킷 : SYN_FIN 플래그 조합 패킷, 아무것도 설정되지않은 패킷

<비정상 TCP 패킷 탐지 방법>

기본적인 SYN_FIN 프래그 조합 패킷 탐지방법은 아래와 같습니다.

실제로는 SYN_FIN에 다른 플래그를 붙여서 사용하기도 하기때문에 이를 탐지하는 방법은 아래와 같습니다.

+ 기호는 SF플래그이외에 다른 플래그가 붙어있는 패킷을 탐지합니다.

 

- iptables

iptables는 침입차단시스템으로 사용되며 상태추적 기능을 제공합니다. 아래는 상태들입니다.

  • NEW 상태 : 최초로 들어온 패킷의 상태
  • ESTABLISHED 상태 : 상태추적 테이블에 연관된 연결 정보를 가지고 있는 패킷의 상태, 연결된 이후에 송수신 되는 패킷들의 상태
  • RELATED 상태 : 다른 연결정보와 연관되어있는 패킷, FTP에서 데이터패킷은 RELATED 상태라고 할 수 있습니다.
  • INVALID 상태 : 어떤 상태에도 해당되지않는 패킷 상태를 의미합니다.

 

<FTP Active Mode 상태 추적 기능 테스트>

먼저, iptable 룰을 작성해줍니다.

Active MOde 로그 및 상태는 아래와 같습니다.

Passive Mode 로그 및 상태는 아래와 같습니다.

 

<limit 모듈>

룰에 매치되는 비율을 제한할 수 있는 기능으로 불필요한 로그를 남기지 않도록 할때 유용합니다. 아래는 예시입니다.

iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -m limit --limit 6/minute -j LOG --log-prefix "[LIMIT]"

인풋체인에서 모든 플래그를 검사해서 SYN,FIN 플래그가 있는 것들은 LOG를 남기는데, 분당 6개까지 남깁니다.

 

- 여러가지 보안 솔루션

<네트워크 접근제어(NAC)>

네트워크 제어 및 통제기능을 통해서 내부 네트워크가 바이러스나 웜 등의 보안 위협으로부터 안전한 단말기들로 이루어질 수 있도록 강제하는 역할을 수행합니다.

 

<통합 보안 시스템(UTM)>

방화벽, IDS,IPS,가상사설망, 안티바이러스, 웹/이메일 필터링등 다양한 보안 기능을 하나의 장비로 통합하여 제공하는 보안 솔루션 입니다.

 

<엔드포인트 탐지 및 대응 솔루션(EDR)>

악성코드, 랜섬웨어등이 많이 살행되는 지능화된 방식을 효과적으로 탐지하고 대응하기위한 목적으로 PC, 모바일, 서버 등 엔드포인트에서 발생하는 악성 행위를 실시간으로 감지하고 이를 분석 및 대응하여 피해확산을 막는 솔루션(제품)을 말합니다. EDR 솔루션은 엔드포인트에서 실행되는 프로세스 기반의 모든 행위를 지속적으로 모니터링하고 이를 기반으로 탐지하기 때문에 알려진 악성 행위뿐만아니라 알려지지않은 악성행위에 대해서도 사전 대응할 수 있습니다.

 

<전사적 보안관리 시스템(ESM)>

다양한 보안장비에서 발생하는 보안 정보(로그, 이벤트)등을 통합적으로 수집 및 관리하여 불법적인 행위에 대응할 수 있도록 하는 통합 보안 관리 시스템을 말합니다. 구성요소는 아래와 같습니다.

 

- 네트워크 보안 장비 운영

<네트워크 방화벽>

네트워크 계층의 IP주소와 전송 계층의 Port 주소를 기반으로 방화벽 룰셋에따라 패킷 필터링을 수행하는 보안장비를 말합니다. 상태 검사기능을 대부분 지원합니다. 

 

<침입 탐지 시스템(IDS)>

공격을 탐지하는 보안장비로 NIDS(Network based IDS)인 경우 미러링 모드로 설치합니다. 

  • 오용 탐지 : 블랙 리스트 기반 탐지. 미탐률이라는 다른 공격을 탐지 못하는 비율이 높습니다.
  • 이상 탐지 : 화이트 기반 탐지, 오탐률이라는 정상적인 사용자인데 공격으로 탐지하는 비율이 높습니다.
  • 호스트 기반 IDS : HIDS라고도 불리우며 호스트에 설치되어 자원 사용실태, 로그등을 수집하여 탐지합니다. 대표적으로 무결성을 검사하는 트립와이어가 있습니다.
  • 네트워크 기반 IDS : NIDS라고도 불리우며 패킷을 수집하여 탐지활동을 하는 IDS를 말합니다. 스노트랑 수리카타가 있습니다. 스노트는 단일 스레드방식이고 수리카타는 멀티코어/멀티스레드 방식을 지원합니다.

 

<네트워크 보안 장비 설치 모드>

인라인 모드 : 실제 패킷을 탐지하고 차단까지 할 수 있는 장점이 있지만 장비에 장애가 발생할 경우 전체 네트워크 장애로 확산될 수 있는 위험성이 있습니다.

미러링 모드 : 전체 네트워크 가용성에 영향을 주지않으면서 패킷을 탐지할 수 있는 장점이 있찌만 복제된 패킷을 탐지하기때문에 실제 패킷을 차단하기 어렵습니다.

 

- 보안 장비 취약점

보안 장비 default 계정 변경 : 기본 계정을 그대로 사용할 경우 취약할 수 있습니다.

보안장비 default 비밀번호 변경 : 기본 비밀번호를 그대로 사용할 경우 취약할 수 있습니다.

보안장비 계정별 권한 설정 : 보안장비 계정별로 권한을 설정해 최소권한을 만족시켜야합니다.

 

- 시스템 점검 도구

<취약점 점검 도구>

시스템 점검도구로는 아래와 같은 도구들이 있습니다.

  • 네서스 : 로컬 또는 원격지에서 다양한 방법을 통해 시스템, 네트워크, 웹 어플리케이션등의 알려진 취약점에대한 점검을 수행하며 점검을 통해 취약점의 내용과 해결 방법을 상세하게 제공합니다.
  • 닉토 : 웹해킹에 대응하기위한 도구로 취약한 CGI 파일을 스캔하는 기능이 매우 뛰어납니다

<무결성 점검 도구>

무결성 점검 도구로는 트립와이어가 있습니다. 트립와이어는 시스템 내에 지정한 중요한 디렉터리와 파일에대한 정보를 담은 데이터베이스를 생성한 후에 트립와이어를 실행할 때 새로 생성된 데이터베이스와 비교하여 그 차이점을 보고해 줌으로써 시스템 관리자가 시스템내에 어떠한 변화가 있는지 감지할 수 있는 도구입니다. 다만, 공격자가 루트킷/백도어를 설치한 후 트립와이어 데이터베이스를 갱신해버리는 경우에는 공격 사실을 알 수 없는 단점이 있습니다.

 

<루트킷 점검 도구>

루트킷은 자신의 공격행위를 숨기기위해 정상적인 프로그램(ps, ls)을 변조하여 자신의 존재를 숨깁니다. 하지만 이를 chkrootkit과 같은 루트킷 점검도구로 식별할 수 있습니다. 숨겨진 루트킷을 탐지하는 원리는 아래와 같습니다.

1. 리눅스는 현재 실행되고 있는 프로그램들을 /proc 디렉토리에 정리해 놓습니다.

2. chkrootkit은 ps 실행결과와 /proc 디렉터리에 있는 프로세스 정보를 비교하여 /proc 디렉터리에는 프로세스가 있지만 ps 실행시 보이지 않는 프로세스를 히든 프로세스로 탐지합니다.

다만, 오탐이 발생할 수 있기때문에 실제 확인이 필요합니다. 또한 공격자는 백도어를 실행한 후 삭제하는 방식으로 자신의 존재를 숨기는 경우도 있습니다.

 

<루트킷 대응방법>

1. "rpm -V 패키지 이름" 명령어로 파일의 무결성을 검사합니다.

결과는 아래처럼 해석합니다.

  • S : 파일 크기가 변경되었습니다.
  • M : 퍼미션이 변경되었습니다.
  • 5 : MD5 체크섬이 변경되었습니다.
  • T : 파일 수정 시간이 변경되었습니다.
  • U : 소유자 정보가 변경되었습니다.
  • G  :소유 그룹 정보가 변경되었습니다.
  • D : 장치 정보가 변경되었습니다.
  • L : 심볼릭 링크가 변경되었습니다.

2. strace 명령을 이용하여 변조된 파일을 확인합니다. strace 명령은 특정 프로그램의 시스템 콜과 시그널을 추적하는데 사용하는 디버깅 도구로 변조된 프로그램과 정상적인 프로그램을 비교하여 변조 여부를 알 수 있습니다.

3. 패키지 재설치를 합니다. 재설치에 오류가 나는경우 공격자가 변조한 실행파일을 삭제하지 못하도록 속성을 설정했을 확률이 높습니다. lsattr 명령어를 통해 i 속성(삭제불가)이 있는지 확인합니다.

만약 i 속성이 있다면 chattr 명령어로 i 속성을 없애줍니다.

 

<DBD 공격 이해>

DBD란 Drive By Download의 약어로 다운로드를 유도하는 공격이라는 의미입니다. 공격자는 홈페이지를 해킹한 후 사용자 pc의 취약점을 익스플로잇하는 악성 스크립트와 악성코드를 은닉시키고 취약한 PC 환경의 사용자가 홈페이지에 접속할 경우 자신의 의도와는 무관하게 악성코드가 다운로드되어 설치되는 공격 기법을 말합니다. DBD 공격은 일반적으로 난독화된 악성 스크립트와 다수의 경유지, 중계지를 거쳐 최종 유포지로 접속하여 악성코드를 다운로드하도록 유도합니다.

 

- 난독화 이해

자바스크립트를 이용한 다양한 난독화 기술에대해서 이해해보겠습니다.

 

<분할 난독화>

 

<10진수 난독화>

 

<16진수 난독화>

 

- 로컬 포트포워딩과 리모트 포트포워딩

<로컬 포트 포워딩>

<리모트 포트 포워딩>

 

- SSL/TLS 관련 취약점

<하트블리드 취약점>

하트블리드 취약점은 통신 구간 암호화를 위해 많이 사용하는 OpenSSL 라이브러리의 하트비트 확장 모듈의 버그로 인하여 발생한 취약점으로 서버에 저장된 중요 메모리 데이터가 노출되는 취약점을 말합니다. 하트비트 확장모듈은 OpenSSL 1.0.1에 추가된 기능으로 클라이언트가 하트비트를 요청하면 payload와 payload 길이를 보내면 서버측에서 하트비트 응답에 그 내용을 길이만큼 복사하여 되돌려주는 역할을 합니다. 이때, 하트비트 확장 모듈에서 하트비트 요청 메시지를 처리할때 데이터 길이 검증을 수행하지않아 시스템 메모리에 저장된 64KB 크기의 데이터를 외부에서 아무런 제한없이 탈취할 수 있습니다.

 

<하트블리드 취약점 대응방안>

취약점이 존재하지 않는 OpenSSL 버전으로 업데이트합니다. 아니라면 네트워크 보안 장비로 대응할 수 있습니다. 하트블리드 공격의 메시지는 보통 아래와 같은 형태를 띕니다.

  • 첫번째 18 03 00에서 18은 하트비트 메시지를 의미하고 0300은 SSLv3.0을 의미합니다. 
  • 두번째 01은 하트비트 요청을 의미합니다.
  • 세번째 ff ff 는 65535 길이를 요청합니다.

따라서 위 패킷을 잡기위해 아래와 같이 네트워크 장비를 설정할 수 있습니다.

 

<freak 취약점>

프랑스 국립 연구소 및 MS 사에서 SSL을 통해 강제로 취약한 RSA로 다운그레이드 시킬 수 있는 취약점을 발견했습니다. 이는 ssl3_get_key_exchange 함수에서 발생하는 취약점으로 공격자가 MITM(man in the middle) 공격으로 SSL 패킷 조작을 통해 512비트 다운그레드 시켜 정보를 유출시킬 수 있습니다. 512비트 RSA는 수시간내로 암호 해석이 가능합니다. 이때 필요조건은 서버 및 브라우저에서 RSA_EXPORT 기능을 제공하는 경우에 해당됩니다. 즉, EXPORT용 암호화 기술에 freak 취약점이 있었습니다.

 

<freak 취약점 대응방안>

대응방안으로는 OpenSSL 버전 사용시 최신 버전으로 업그레이드합니다.

 

<로그잼 취약점>

로그잼 취약점 또한 중간자 공격을 통해 서버간의 TLS 통신을 다운그레이드 시킬 수 있습니다. 로그잼 취약점은 TLS 암호화 suite를 EXPORT용 suite로 다운그레이드할 수 있습니다.

 

<푸들 취약점>

SSL/TLS 협상 시 버전 다운그레이드 공격을 통해 SSLv3.0을 사용하도록 강제한 후 MITM공격을 통해 암호화되어 송수신되는 쿠키 정보나 데이터를 추출하는 공격을 말합니다.

 

<드라운 취약점>

공격자는 SSLv2.0을 사용하는 서버에 악성패킷을 보내 인증서 키 값을 알아내고 키 값을 이용해 암호화된 통신을 복호화해 주요 정보를 탈취할 수 있습니다.

 

<NTP 분산 서비스 거부 취약점>

NTP는 네트워크를 통해 컴퓨터 시스템 간 시간 동기화를 위해 사용하는 인터넷 프로토콜로 UDP 123번 포트를 서비스 포트로 사용합니다. 원래 NTP서버는 시간을 얻어고 설정하기위해서 사용했지만 monlist기능때문에 취약점이 발생합니다. monlist는 최근 접속한 최대 600개의 접속 호스트 리스트를 응답해주는 기능으로 작은 요청으로 큰 응답을 만들 수 있습니다.

따라서 공겨자는 ip 출발지를 희생자 ip로 스푸핑한후 monlist 요청을 보냅니다.

 

<SSDP 분산 서비스 거부 공격>

SSDP는 네트워크 상의 서비스나 정보를 검색하는 프로토콜로 다양한 IOT 기기의 네트워크 탐색 용도로 사용되며 UDP 1900번 포트를 사용합니다. 클라이언트가 서버에게 SSDP를 보내면 서버는 클라이언트에게 다양한 장비들에대한 정보를 응답합니다. 이때 응답의 크기가 크므로 증폭이됩니다.

Comments