최근 회사에서 빅데이터, 머신러닝, 딥러닝 등 데이터에 대한 수 많은 프로젝트가 진행됨에 따라

차근차근 알아보고자 한다.

그 중, 빅데이터 처리를 위한 방법 중 하둡에 대한 간단한 소개를 한 후, 스파크로 넘어가고자 한다. 


아파치 하둡이란?

- 빅데이터를 저장, 처리, 분석할 수 있는 소프트웨어 프레임워크

- 대량의 자료를 처리할 수 있는 큰 컴퓨터 클러스터에서 동작하는 분산 응용 프로그램을 지원하는 프리웨어 자바 소프트웨어 프레임워크(위키백과)

- 하둡에서 꼭 알아야 할 것: HDFS(Hadoop Distributed File System), 맵리듀스(실제 맵리듀스가 핵심)로 구성


아파치 하둡 특성

1) Distributed: 수십만대의 컴퓨터에 자료 분산 저장 및 처리

2) Scalability: 용량이 증대되는대로 컴퓨터 추가

3) Fault-tolerant: 하나 이상의 컴퓨터가 고장나는 경우에도 시스템이 정상 동작

Node가 Fail난 경우, 마스터 노드는 Fail을 감지하고 작업을 다른 Node에 할당함으로 해결

4) Open Source: 공개 소프트웨어


아파치 하둡 아키텍쳐


(사진 출처: http://blog.raremile.com/hadoop-demystified/)


- 하둡은 Master Node와 Slave Node로 구분된다. 위의 그림에서는 Master Node와 Slave Node로 표현이 되어있지만 사실 하둡은 Name Node와 Data Node라고 표현하는 것이 더 맞는 표현인 것 같다. (스파크에서는 Master/Slave로 표현)

- HDFS(Hadoop Distribution File System): 분산 데이터를 처리하기 위해 데이터가 저장되는 파일 시스템

수십 테라/페타 바이트 이상의 대용량 파일을 분산된 서버에 저장하고, 그 데이터를 빠르게 처리할 수 있도록 해주는 파일 시스템이라고 보면 된다. HDFS는 블록 구조의 파일 시스템인데 초기에는 크기가 64MB였는데 하둡 2.0부터 128MB로 증가 되었다.


이 HDFS의 구성 컴포넌트는 아래 Name/Data Node로 나뉘게 된다.

1) Name Node(Master Node): 메타 데이터 관리, Data Node 모니터링, 장애노드의 관리, 클라이언트의 권한 확인 

사용자가 파일을 HDFS로 업로드한다고 가정해보자. 이 때, Name Node는 파일을 가지고 있는 것이 아니라 각 Data Node에 분산 저장 되는 파일들의 메타 데이터를 가지고 있다. 쉽게 얘기하자면, 어떤 파일이 어떤 Data Node에 있는지에 대한 정보를 가지고 있다. 또한, Data Node를 모니터링 하는데, 3초마다 Heart Beat를 전송하게 되고, 이에 응답하지 않는 Data Node를 장애 노드로 판단한다.

Name Node의 장애가 발생 시, 전체에 영향을 줄 수 있다. 이에 대비하여 보조 네임 노드가 존재한다.
(Name Node의 백업이 아닌, 메타데이터 파일 시스템 이미지 갱신하는 역할 수행)

2) Data Node(Slave Node): 실제 task를 수행하는 노드.



아파치 하둡 아키텍쳐(1.0과 2.0 비교)
(http://www.oss.kr/oss_news/545626 발췌)


- YARN은 자원 관리와 스케쥴링이라는 두 가지 태스크를 별개의 개념으로 분리하는 기술

- YARN은 중앙 자언 관리자와 어플리케이션 마스터를 보유. 각 어플리케이션을 별개로 구성하기 위해 만들어짐

-> 이는 배치, Interactive, In memory, Streaming, Online, Graph, 기타 유형의 App을 동시에 실행시키도록 돕는 기술



- 하둡 1.0에서는 TaskTracker 수천 개와, 맵리듀스 태스크를 처리해야 하는 JobTracker가 하나 있음

-> 확장성과 관련된 선택권을 줄이며, 클러스터가 하나의 app만 실행


- 하둡 2.0에서는 하나의 Resource manager와 여러 개의 Application Master가 존재하여 별개의 Application Master가 각 Application을 관리하기 때문에 클러스터에서 병목 현상이 발생하지 않음

- 동시에 YARN은 Global Resource manager로 자원 활용도를 높이고, 이를 추가하여 클러스터 속도를 높일 수 있음. YARN에서는 공동 자원 풀을 공유하는 여러 다른 Application을 실행시킬 수도 있음. 맵리듀스 슬롯이 정해져 있지 않기 때문에, 클러스터 내부 자원을 더 효율적으로 활용하는데 도움을 줌

- Apache Giraph, Spark, Apache HAMA, Storm 등 새 아키텍쳐 들에 맞게 조정 되어 있음



아파치 하둡 프레임워크 (Hadoop Ecosystem 2.0)

(사진 출처: http://blrunner.com/99, 밑의 내용 포함)





'기타 > 분산 컴퓨팅' 카테고리의 다른 글

Spark RDD 개념 및 예제  (0) 2017.04.07
Apache Spark 설치  (0) 2017.04.07
Apache Spark란 무엇인가?  (0) 2017.04.07
아파치 하둡 맵리듀스  (0) 2017.04.01
아파치 하둡 HDFS 사용법(Cloudera 사용)  (0) 2017.03.31

해당 포스팅 내용은 잊어먹지 않기 위해 간략히 작성한 내용이기 때문에 볼 필요는 없을 것 같고, 

http://codeengn.com/archive/Forensic/Volatility%20command%202.1%20%5B%EB%B3%B4%EC%95%88%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8,%20%EC%9D%B4%EC%8A%B9%EC%A4%80%5D.pdf

PDF 파일을 보시면 자세히 알 수 있습니다.
맨 밑에 cuckoo 연동 부분만 보셔도..


1) VB2016 paper: Open source malware lab(http://kkn1220.tistory.com/115)

2) Cuckoo Sandbox (http://kkn1220.tistory.com/116)

3) Thug (http://kkn1220.tistory.com/117)

4) Bro (http://kkn1220.tistory.com/118)


Volatility


1. Volatility  개념

- 포렌직 메모리 분석에서 많이 사용하고 있는 파이썬 기반 오픈소스
- 은닉되어 있는 프로세스 조사
(1)
pslist: 시스템의 프로세스를 열거하기 위함

(2) psscan: 풀 태그 스캐닝을 사용하여 프로세스들을 열거하기 위해 사용되는데 종료된 프로세스들과 루트킷에 의해 숨겨지거나 연결이 끊어진 프로세스들을 찾을 수 있음

(3) psxview: pslistpsscan으로 숨겨진 프로세스를 찾음

(4) ssdt: System Service Descriptor Table(SSDT)에서 후킹된 것을 찾음


psxview 플러그인은 pslistpsscan을 교차하여 숨겨진 프로세스를 찾는 역할

pslist는 각 프로세스가 더블 링크드 리스트로 연결되어 있는 것을 이용해서 프로세스 목록을 출력하지만 psscan은 메모리 이미지의 처음부터 끝까지 스캔을 하여 프로세스 목록을 출력하는 형식
-> 그러므로 psscan에서는 확인이 가능하지만 pslist에서 확인이 안되는 프로세스는 악성 일 가능성이 높음

Psscanpslist와 유사하지만 pool tag 스캔을 통해 프로세스 목록을 생성하기때문에 DKOM을 통해서 프로세스를 은닉하는 경우에도 출력이되는 차이점이 있음

※DKOM(Direct Kernel Object Manipulation) : 자신의 앞 뒤에 존재하는 EPROCESSActiveProcessLinks를 조작하여 자신을 건너뛰고 서로 직접 연결되도록 조작하는 기법 




2. Volatility 분석 (SSDT 후킹 내용 간략 설명)

1) 메모리 덤프

- Dumpit이나 기타 메모리 덤프 할 수 있는 툴을 사용하여 메모리 덤프


2) 이미지 확인 

- profile 확인


3) 프로세스 목록 확인

pslist, psscan, psxview, ssdt를 통해 목록 확인
- volatility -f
덤프파일 --profile=Win7SP1x86 pslist > c:\usb\pslist.txt

- volatility -f 덤프파일 --profile=Win7SP1x86 psscan > c:\usb\psscan.txt

- volatility -f 덤프파일 --profile=Win7SP1x86 psxview > c:\usb\psxview.txt

- volatility -f 덤프파일 --profile=Win7SP1x86 ssdt > c:\usb\ssdt.txt

4) (ex. ssdt 후킹 사례)

ssdt를 확인 결과 ntoskrnl.exe / win32k.sys 이외에 목적지로 설정 되어있다는 가정 (후킹 된 것임)

(꼭 위에 두개로 owned by <ntoskrnl.exe / win32k.sys> 가 있어야됨  (왼쪽은 시스템쪽 api 오른쪽은 gui 관련 api))

5) ssdt 후킹 확인

type ssdt.txt | findstr /i /v ntoskrnl.exe | findstr /i /v win32k.sys


6) 다음 진행 사항들  

-Sleutkit 와 같은 툴을 사용하여 은닉 악성파일 추출


(본 내용은 해당 내용 범위에 벗어나는 내용이기 때문에 다루지 않음

추후 $MFT, UserJnrl, Log File 을 추출하고, 해당 내용을 분석 하는 방법에 대해 포스팅 할 예정)



3. Cuckoo 연동

Cuckoo는 Volatility 연동을 지원을 하는데

- 시간이 엄청 오래 걸림... 사실 샌드박스는 3~5분에 한 파일에 대해 끝내야 되는데 메모리 덤프 및 분석을

위한시간이 많이 소요됨

- Cuckoo가 뭔가 큰 그림을 보는거 같은데 잘 모르겠음..


설정파일 변경

- cuckoo.conf 변경

- memory_dump = on으로 변경


processing.conf 변경

메모리 분석 기능 활성화

- enabled = yes로 변경

memory.conf 변경

모두 yes 로 변경



1) VB2016 paper: Open source malware lab(http://kkn1220.tistory.com/115)

2) Cuckoo Sandbox (http://kkn1220.tistory.com/116)

3) Thug (http://kkn1220.tistory.com/117)

4) Volatility (http://kkn1220.tistory.com/119)


Bro


1. Bro 개념

Bro는 침입탑지 시스템(IDS) 중 하나

- 네트워크 패킷을 읽어 유해한 내용을 탐지하는 솔루션에서 출발-> 탐지 뿐만 아니라 클러스터링과 분석까지 수행

- 분석에는 오프라인 분석과 포렌직까지 수행 (진행 중인데 현재 상황 확인 필요)
- 다양한 응용 프로토콜 지원(DNS, FTP, HTTP, IRC, SMTP, SSH, SSL )
- 포괄적인 IPv6 지원.


2. Bro Architecture


Tap: 감청을 위해 패킷 스트림의 복사본을 만드는 메커니즘

- Frontend: 트래픽을 많은 스트림 또는 플로우들로 나누는 호스트 상의 기술
- Manager: 로그 메시지들을 받아 처리하고, 중복 노티스 제거
- Proxy: 동기화 상태 관리
- Worker: 네트워크 트래픽을 스니핑하고, 프로토콜 분석 수행
            
모든 프로토콜에 대한 파싱과 분석 수행

Bro는 멀티쓰레드가 아님. 그래서, 일단, 싱클 프로세서 코어의 한계가 있고, 현재 이를 위한 선택사항으로 부하를 다수 코어에 분배하는 것을 고려할 수 있음



3. 설치

1) Bro 다운로드

https://www.bro.org/download/index.html

2) 필수 설치 항목 설치

$sudo apt-get install cmake make gcc g++ flex bison libpcap-dev python-dev swig zlibig-dev

3) 컴파일 설정 파일 생성

$ sudo ./configure

4) 컴파일 및 설치

$sudo make


$sudo make install

4. 실행

(자세한 실행은 추후 진행 예정..)



http://www.hakawati.co.kr/215 참고


1) VB2016 paper: Open source malware lab(http://kkn1220.tistory.com/115)

2) Cuckoo Sandbox (http://kkn1220.tistory.com/116)

3) Bro (http://kkn1220.tistory.com/118)

4) Volatility (http://kkn1220.tistory.com/119)


Thug


1. Honeypot개념

허니팟이란 비정상적인 접근을 탐지하기 위해 의도적으로 설치해 둔 시스템

- 이를 통해 공격자를 추적하고 정보를 수집하는 역할 수행

- 공격자를 속이기 위해 마치 정상 시스템에 침투한 것처럼 속임

- 특징으로 사용자 PC 환경과 유사하여야 하며, 해당 시스템에 접근하는 모든 패킷을 감시해야 함

- Client Side Honeypot, Server Side Honeypot


2. Client Side Honeypot 종류 (HoneyClient)


웹 브라우저에 초점을 두기 때문에 웹 서버와의 상호작용에서 악의적인 행위를 탐지하는 부분으로 특화

-> Drive-By Download 형태와 같은 공격에 대한 탐지와 연구에 많은 도움


1) High interaction:
-
실제 브라우저를 통해 웹 서버에 방문 후 발생하는 파일의 변화, 레지스트리 변화 등의 시스템의 변화를 관찰하는 시스템으로 실제 시스템을 구현하여 사용하는 형태

- 장점: Unknown 공격(Zero-day attack) 탐지 가능
- 단점: 구현하기가 쉽지 않고, 시스템 성능에 따라 속도 차이가 심함

- 종류: Capture-HPC, HoneyClient, Strider HoneyMonkey, Web Exploit Finder, Cuckoo


2) Low interaction

- 실제 시스템을 구현하는 것이 아닌 서버와 상호작용하는 부분만을 구현하여 시뮬레이션

- 장점: 구현하기가 쉽고, 시스템 일부만을 구현하기 때문에 자원소모가 적음

- 단점: 알려진 공격에 대해서만 정보 수집이 가능

- 종류: HoneyC, Monkey-Spider, PhoneyC, SpyBye, Thug, CUJO, Jsand, Dionaea, Glastopf


3) Hybrid Client Honeypots

- 1, 2를 결합한 형태로 알려진 악의적인 행위에 대해서는 낮은 상호작용 허니팟을 통해 빠르게 탐지하고 알려지지 않은 악의적인 행위는 높은 상호작용 허니팟을 통해 탐지하여 탐지 속도 및 미탐에 대한 대응
- 종류: HoneySpider



3. 설치(Ubuntu 16.04 기준)

- Thug의 경우 단순 설치만을 하였기 때문에 Docker로 설치함

$sudo apt-get install docker.io


$sudo docker pull honeynet/thug


4. 실행

$sudo docker run –it honeynet/thug


(Usage)


Test site는 malicious URL 을 참고함

해당 Thug는 자바스크립트 내용 및 크롤링을 통해 분석하는 기능 또한 제공



1) VB2016 paper: Open source malware lab(http://kkn1220.tistory.com/115)

2) Thug (http://kkn1220.tistory.com/117)

3) Bro (http://kkn1220.tistory.com/118)

4) Volatility (http://kkn1220.tistory.com/119)

5) 쿠쿠 샌드박스 설치 내용: Kisa 아카데미 보안 샌드박스 활용 실무 교육 (https://academy.kisa.or.kr)


Cuckoo Sandbox


1. 개념

- Sandboxing* 기술을 적용하여 의심스러운 파일의 자동 분석을 가능하게 하는 오픈소스 소프트웨어

-> 악성코드 분석을 실행할 수 있는 도구!


 Sandboxing?
신뢰하지 못하는 프로그램 또는 파일을 격리 된 환경에서 실행하고 그것이 무엇을 하는지에 대한 정보를 얻음

Malware Sandboxing은 악성 파일을 동적 분석 할 수 있는 실질적인 어플리케이션

          (파일의 정적 분석 뿐만 아니라실행 및 모니터링까지 함)


2. Cuckoo Sandbox 구조

Cuckoo Host

  : Cuckoo Guest가 악성파일을 분석할 수 있도록 명령을 내리며분석 후 나온 결과를 파일로 저장

Analysis Guest

  : Cuckoo Host와 통신을 하며명령을 받아 악성 파일에 대한 분석을 진행

Virtual Network

  : Cuckoo Host의 명령을 받아실제 분석을 진행할 Cuckoo Guest , Virtual Machine을 생성


3. 분석 환경

- 분석 가능 파일

-> 일반적인 윈도우 실행파일, DLL파일, PDF/MS office, HTML, PHP, ZIP 등 대부분 모든 것들

- 분석 가능 환경

-> 윈도우, Mac, Debian 계열의 Linux 등


4. 구성도


1) Auxiliary Module

총 4가지의 엔진으로 구성

a. MITM

       - HTTP 및 HTTPS 트래픽 캡처

       감시할 대상 port를 지정하여 동작

b. Reboot

       악성코드의 완전한 분석을 위한 분석 환경 clear 및 분석이 완료된 파일의 재분석을 진행할 때 사용

c. Services

       기본적으로 사용하는 가상 머신 외에 추가로 구축한 가상머신에서 새로운 분석을 진행하기 위한 기능
        (
기본 제공 환경: KVM, VirtualboxVmwareVsphere )

d. Sniffer

       Tcpdump 모듈을 이용해서 네트워크 트래픽 캡처


2) Machinery Module

- Machinery를 설정하는 cuckoo.conf 파일을 읽고설정 되어 있는 가상 머신의 실행과 종료를 주관


3) Processing Module

 23개의 모듈을 통해 가상 환경에서 생성된 결과를 분석하고이후 진행될 Signature, Reporting 모듈에서 사용되는 데이터 정의


4) Signatures Module

안드로이드윈도우리눅스 등의 OS에 대한 시그니처를 제공하며총 약 360개의 행위 패턴 제공

- Processing Module에서 분석한 내용을 기반으로 행위 패턴 매칭 수행

5) Reporting Module

- Processing, Signatures module들을 거쳐 나온 데이터를 사용자가 보기 쉽도록 가공하는 기능 수행


5. 설치(Ubuntu 16.04 기준)


1) Python 기본 모듈 설치

$ sudo apt install python python-pip python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev libjpeg-dev mongodb git

$sudo apt install build-essential libffi-dev python python-dev python-pip automake autoconf libtool

$sudo BUILD_LIB=1 pip install ssdeep     //ssdeep  A,B라는 악성코드가 있을 때 연관성 확인

$sudo apt install libfuzzy-dev

$sudo pip install pydeep    //$pip list  설치된 항목 보기


2) TCP dump 모듈 설치

$sudo apt install libcap2-bin

$sudo apt install tcpdump

$sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

$getcap /usr/sbin/tcpdump


3) Yara 설치

$sudo apt install automake libtool make gcc

$wget https://github.com/VirusTotal/yara/archive/v3.5.0.tar.gz

$tar -zxf v3.5.0.tar.gz

$cd yara-3.5.0

$./bootstrap.sh

$./configure

$make

$sudo make install

$cd ~

$sudo pip install yara-python


4) Cuckoo 설치 (시간이 좀 걸림)

$git clone https://github.com/cuckoosandbox/cuckoo.gitndbox/cuckoo.git

$cd cuckoo

$sudo pip install -r requirements.txt

$cd ~


5) Virtualbox 설치 (무료니깐~)

$wget http://security.ubuntu.com/ubuntu/pool/main/libv/libvpx/libvpx1_1.0.0-1_amd64.deb

$sudo dpkg -i libvpx1_1.0.0-1_amd64.deb       //14.04에서는 안됨일단 무시

$wget http://download.virtualbox.org/virtualbox/5.1.10/virtualbox-5.1_5.1.10-112026~Ubuntu~trusty_amd64.deb

$sudo apt-get install libsdl1.2debian

$sudo dpkg -i virtualbox-5.1_5.1.10-112026~Ubuntu~trusty_amd64.deb

$sudo wget http://download.virtualbox.org/virtualbox/5.1.10/Oracle_VM_VirtualBox_Extension_Pack-5.1.10-112026.vbox-extpack

$VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.1.10-112026.vbox-extpack

$sudo /sbin/vboxconfig

가상머신 네트워크설정

$vboxmanage hostonlyif create

$vboxmanage hostonlyif ipconfig vboxnet0 -ip 192.168.56.1

$ifconfig   //vboxnet0이 실제로 설정되어있는지 호스트(ubuntu)에서 확인해주면됨 (중요)

$virtualbox  //virtualbox가 실행됨


6) Guest 만들기

cuckoo1로 하고 디폴트 설치(win 32bit)


- 설정 저장소 시디 비어있음에 광학디스크 이미지 추가

네트워크를 nat에서 호스트전용으로 바꿔주기 (이전 고정 ip지정해둔  vboxnet0)

오디오 사용하기 해제 (물리적공간 낭비 해소 및 실제로 오디오 쓰지도 않아서)

공유폴더 설정하기

- ubuntu에서 $mkdir ~/backup 

- 위의 경로 폴더로 공유폴더 설정하기(virtualbox- auto mount 설정, read-only는 해제)

가상머신에 PIL파일과 python설치파일이 필요하기 때문에 백업폴더를 생성한 것임

윈도우 설치하기

- 이름은 cuckoo1,  암호는 설정안함, 자동보호 없앰

PIL, agent.py, python2.7 설치파일 backup으로 복사

가상 윈도우에서 공유폴더는 게스트확장을 사용할 수 없음으로 되어있음.

 VBoxWindowsAdditions-x86 설치. (공유폴더 위해)


제어판-사용자계정 및 가족보호- 사용자 계정- 사용자계정컨트롤설정변경-bar를 가장 아래로 설정 -> reboot

공유폴더 설정하기

-ubuntu에 설치된 cuckoo 폴더 내 agent.py share폴더로 복사 

($cp ~/cuckoo/agent/agent.py <share_folder_path>

- PIL, python은 인터넷에서 다운로드..


파이썬이랑, PIL(Python Image Library) 설치 
  (default 설치파이썬의 경우 설치과정에서 path설정해두면 별도 설정 필요x)

파이썬 폴더안에 agent.py 복사(c:\Python27)

- Agent 실행 (방화벽 나오면 허용)

스냅샷찍기(핵심)

cuckoo1  반드시 통일시켜줘야됨  (변경시 config파일 설정 필요)

- Machine tab에 take snapshot



7) Cuckoo 환경설정 (ubuntu에서 설정)

$cd ~/cuckoo/conf/

$sudo vi cuckoo.conf

  version_check=off로 변경

$sudo vi vurtualbox.conf

   cuckoo1으로 머신이 매칭 된 것 확인 가능 (3개가 같은지 확인하면 됨)

resultserver_ip 주석 해제resultserver_port  주석 해제

- $vi reporting.conf

  mongodb enable


8) Signature Download


$cd ~/cuckoo

$./utils/community.py waf  //약 350개정도의 패턴을 다운받을 수 있음   //모듈폴더-시그니쳐안에 존재함


9) 실행

$cd ~/cuckoo

$./cuckoo.py  (윈도우 종료되는게 정상 행동)

- $cd ~/cuckoo/web

- $./manage.py runserver 0.0.0.0:8000

- Web브라우저 실행 후 localhost:8000 입력 (아래와 같이 열리면 정상적으로 설치 완료)


- File upload


- 분석 내용 확인



제목: VB2016 paper: Open source malware lab

https://www.virusbulletin.com/virusbulletin/2017/01/vb2016-paper-open-source-malware-lab/

virus bulletin 2016에서 발표한 페이퍼 내용을 정리하고자 한다.


이 페이퍼에서는 http://kkn1220.tistory.com/113 에서 언급한 Fully-automated/ Static properties Analysis에 초점을 두고 있다.

이들이 언급하는 것은 총 4개로 구성되어 있다.

1) Cuckoo Sandbox (http://kkn1220.tistory.com/116)

2) Thug (http://kkn1220.tistory.com/117)

3) Bro (http://kkn1220.tistory.com/118)

4) Volatility (http://kkn1220.tistory.com/119)



요약을 하자면 Malware 분석 주요 포인트 대상을 파일, URL, Network Traffic, Memory Image로 보고 있다.

Cuckoo Sandbox에서 파일 분석

Thug에서 잠재적 악성 URL 분석

Bro에서 네트워크 분석

Volatility에서 메모리 이미지 분석
위 4가지를 자동화를 통해 Malware 탐지 및 분석





참고: https://zeltser.com/mastering-4-stages-of-malware-analysis/


악성파일 분석 정리


- 악성파일 분석에 있어 아래와 같이 분석 기술에 따라 단계별로 구분할 수 있다.

- 피라미드 형식으로 상위로 갈수록 많은 노력이 필요하다.



1. Fully-automated Analysis

악성 파일 여부를 판별하는 가장 쉬운 방법으로 전체 프로세스가 자동화 된 툴 등을 이용하여 분석

- 인간이 수동적으로 처리해야 할 부분을 대신 처리해줌으로, 신속 처리 가능

- 일반적으로 악성 프로그램에 의해 사용 되는 레지스트리, 파일 행위, 네트워크 트래픽 같은 결과값 출력

(Toolkits for Automating Malware Analysis 도구), (Automated Malware Analysis Services 도구)


2. Static properties analysis

의심스러운 파일에 대해, 파일을 실행하지 않고 정적 속성 값에 대해 분석

정적 속성에는 파일에 포함 된 문자열, 헤더정보, 해시값, 포함 된 리소스, 패커, 시그니처, 생성 날짜와 같은 메타 데이터가 포함

- Virustotal은 정적 속성 분석에 우수한 예


3. Interactive Behavior Analysis

- 자동화 도구 사용하 파일의 정적 속성 값 검사 이후 면밀한 검사를 실시 할 때 사용되는 분석

- 행위 분석에는 레지스트리, 파일시스템, 프로세스 및 네트워크 활동을 이해
(파일을 수동적으로 관찰하기 보다는 악의적 행위를 보는 관점)


4. Manual code reversing

- Decoding encrypted data stored or transferred by the sample
- Determining the logic of the malicious program’s domain generation algorithm

- ollydbgida pro와 같이 코드를 역공학하여 분석 하는 것으로 보면 됨


'기타 > 악성코드 분석' 카테고리의 다른 글

Bro 개념 및 설치  (4) 2017.03.27
Thug 개념 및 설치  (0) 2017.03.27
Cuckoo sanbox 개념 및 설치  (5) 2017.03.27
Open source malware lab 정리  (0) 2017.03.27
악성코드란(목적, 분류, 분석 방법)  (0) 2017.03.13


참고: http://kali-km/tistory.com/entry/악성코드-분류    -악성코드 분류



악성코드란?

악성 행위를 위해 개발된 디바이스 상에서 동작하는 모든 실행 가능한 형태

보통 악성코드라 하면 EXE와 같은 실행파일을 생각할 수 있으나, JS와 같은 스크립트 등의 형태도 존재


악성코드의 목적

사회 기반 시설에서부터 산업 기밀 자료를 탈취하기 위한 특수적 목적

기업 대상 개인 정보 수집변조 및 신분 절도 등을 위한 목적

사회적 이슈인 랜섬웨어와 같은 금전 요구 목적

광고 노출 및 홍보를 위한 목적 등


악성코드 분류

1) 동작에 의한 분류

많은 악성코드가 존재하지만, 동작하는지에 따라 크게 네 가지로 분류 가능


1. Virus

- 프로그램을 통해 감염되는 악성코드

- 바이러스 실행 시 새로운 매개체(파일)를 찾고, 바이러스는 대상의 PE* 구조를 변경하거나 코드를 삽입하는 등의 방식으로 자신이 가지고 있는 악의적인 행위를 다른 파일 또한 하도록 조작

- 일반적 파일들만 감염시키는 것이 아닌 플로피 디스크와 하드디스크 파티션의 VBR, MBR 등을 감염

2. Worm

- 컴퓨터의 취약점을 찾아 네트워크를 통해 스스로 감염되는 악성코드

- 바이러스와 달리 스스로 전달 가능하며, 컴퓨터의 파일만을 손상시키는 바이러스와 달리 네트워크를 손상시키고 대역폭 잠식

3. PUP(Potentially Unwanted Program)

- 대개 악성코드는 사용자가 동의하지 않고 설치되지만, PUP의 경우 사용자의 동의가 포함됨

- 로그인할 때마다 광고하고자 하는 웹 사이트의 바로가기를 바탕화면에 생성하거나, 웹 브라우저의 기본 페이지 변경, 광고 노출 등

4. Trojan

- 트로이 목마도 마찬가지로 공격자가 의도하는 바를 위하여 대상을 속인 다음 실행되었을 경우 숨겨져 있던 기능을 수행

- 바이러스와 같이 다른 파일을 변조하지 않고, 웜과 같이 네트워크를 통한 전파나 자가 복제가 이루어지지 않으며, 마지막으로 PUP와 같이 사용자의 동의가 이루어지지 않았을 때 'Trojan'으로 분류 (네 가지중 가장 많이 사용)


PE*: Portable Executable은 윈도우 운영체제에서 사용되는 실행파일, DLL 등을 위한 파일 형식. PE 포맷은 윈도우 로더가 실행 가능한 코드를 관리하는데 필요한 정보를 캡슐화한 데이터 구조


2) 목적에 의한 분류

1. Downloader

- 다운로드 기능이 있는 프로그램 자체가 악의적인 것이 아님. 악성코드 제작자들은 안티바이러스 제품이 다운로드 기능을 막는 것이 아닌 것을 알기 때문에 이를 이용하는 것으로, 차단되지 않고 존재하고 있는 프로그램을 사용자가 실행하였을 경우 외부로부터 추가적인 악성코드를 받기 때문에 이후의 동작을 위한 목적이라 볼 수 있음

2.  Dropper

- 다운로더가 외부에서 파일을 다운받는 것에 반해 드롭퍼의 경우 자기 자신 안에 존재하고 있는 데이터들을 통해 새로운 파일 생성

3.  Launcher

- 1.2 번이 새로운 파일을 생성하였다 하더라도, 추가적인 악성 행위를 하기 위해선 새로운 파일 또한 실행 되어야함. 그렇기에 이들을 실행하기 위한 기능을 수행

4.5.6.7. Adware, Spyware, Ransomware, Scareware

- Adware는 광고를 이용, Spyware는 패스워드 스틸러나 키로거와 같이 세분화 될 수 있음. Ransomware는 요새 가장 핫한 파일 암호화를 통한 몸값 지불 방식(비트코인 사용), Scareware는 겁주기 위한 목적

8. Backdoor

- '뒷문'의 뜻으로 공급 단계에서나, 시스템 침투 이후 '몰래' 시스템에 들어오기 위한 파일을 심어둠

9. Rootkit

- 루트킷은 컴퓨터에 접근하거나 일반적으로 허용되지 않는 영역에 접근할 수 있도록 설계. 일반적으로 악성코드가 시스템에 설치된 후, 들키지 않고 계속 남아 악의적인 기능을 수행


그 외 봇넷, 익스플로잇 등이 있음....


악성코드의 분석

1.초기 분석

- 수집된 악성코드를 처음으로 분석하는 방법. 따로 실행하지 않고, 그 외형을 보고 분석을 하는 단계


- Virustotal을 이용한 정적 속성 분석


- 패킹 여부 확인


- 언패킹을 통한 문자열 확인


좌측은 UPX로 패킹이 되어 문자열이 전부 보이지 않지만, 오른쪽의 경우 언패킹을 하여 확인 결과, 더 많은 API 문자열을 확인할 수 있다.


위와 같이 악성코드 파일을 실행하지 않고, 파일의 외형이나 간단히 들여다 볼 수 있는 정보들을 이용하여 악성코드의 동작 방식을 유추할 수 있는 단계를 초기 분석이라고 한다.





2.동적 분석

악성코드를 분석환경에서 실행시킨 직후부터 순간순간 시스템의 변화를 분석하는 단계

(네트워크/프로세스/파일시스템/레지스트리 조작 행위들에 대한 분석)



1) 네트워크 행위 확인

  (외부 시스템과의 통신 여부 확인)


Wireshark를 통한 네트워크 행위 확인


TCPView를 통한 행위 확인




2) 프로세스 행위

  (추가로 생성하는 프로세스 존재 여부)

  (프로세스 자가 종료 여부)


Process Explorer를 통한 비정상 프로세스 확인

   -주요 프로세스 확인

   -사용자 관련 프로세스 확인

    (explorer.exe 프로세스 하위에 동작하는 프로세스 확인)

   -의심 프로세스 정보 확인

    (Description, Company Name, Version, TCP/IP, Strings )



Process Monitor를 통한 boot logging 확인

   - 프로세스 상관관계 분석

   - 인젝터 존재유무 확인

   - 은닉 프로세스 확인

   - 의심 프로세스 행위 분석

    (e.g. 지속적인 DNS Cache DATA 초기화, 특정 폴더 복사 등)


3) 파일시스템 행위 (위 내용들을 통해 해결 가능)

- 추가 파일 dropping 여부 확인

- 파일 삭제 및 조작 여부 확인



4) 레지스트리* 조작 행위
   (
레지스트리*: 시스템, 애플리케이션과 사용자와 관련된 환경설정 정보 및 각종 프로파일링 정보를 담고있는 일종의 데이터베이스)

- 레지스트리의 자동실행 관련 포인트 조작 여부 (~~\Services\, ~~\Runs, ~~\SSODL )


Autoruns를 통한 자동실행 지점 확인







3.정적 분석

정적 분석은 악성코드 파일을 디스어셈블하여 세부적인 동작을 분석하는 단계


ollydbg를 통한 메모리 분석


ida를 통한 정적 분석



이번 포스팅에는 국가에서 지원하는 k-shield  인력 양성 프로그램에 대해 소개하고자 한다.

너무 좋았던 프로그램이기에 다른 사람들도 많이 지원 및 인증을 하면 좋을 것 같아 설날 연휴임에도 불구하고 포스팅을 하고자한다.

작년에 취득한 내용을 기반으로 작성하기 때문에 올해 시행하는 것과는 다소 차이가 있을 수 있다.

작년 교육을 신청하였을 때 궁금한 것이 너무 많았으나 자료가 많이 없었던 기억이 있어 누군가에게는 도움이 되면 좋겠다. 


https://academy.kisa.or.kr 에 접속하면 k-shield  인력 양성 프로그램이 있다.
(사전평가 1번, 1차 평가 3번, 2차 평가 3번 총 7번의 시험...)


올해에도 작년과 비슷하게 4월부터 7월까지 1차가 실시된다.


1차 교육은 월,화,수,목,금 모든 요일에 교육이 진행되며 평가가 3번이 있다.


작년에는 3월 17일 사전 평가를 실시하였다. 총 시간은 14:30분에서 15:10분 총 40분동안 시험을 실시하였다.

평가 문항 및 시간: 30문항 40분

장소: 서울시 서초구 서초대로 플래티넘타워


나는 작년에 매주 금요일반으로 수업을 하였다. KISA에서 실시하는 교육은 좋은게 교재, 필기구, 중식이 모두 무료이다 ^^... 더 좋은건 매번 풍부한 과자를 제공해주어 수업시간에 계속 과자를 먹을 수가 있다... 지금 생각해보면 작년 교육기간동안 먹은 과자의 양은 내 평생 먹은 과자와 비슷하지 않을까...라는 생각을 조심스럽게 해본다..


사전 평가 1주일 후 메일이 왔다.. 



나중에 들은 소리인데 나름 경쟁률이 높다고 하였는데 이는 뭐 확인하는 방법이 없으니 자축하면 될 듯하다..


1차 교육

총 13회차동안 교육이 진행이 된다.

일정 및 입과 안내서가 있지만 그대로 올리기에는 찜찜한 면이 있어 대략적으로 텍스트로 적을까한다.

- 보안 사고사례 동향

- 정보보호 컴플라이언스

- 시스템 공격

- 웹 취약점 분석 및 공격

- 악성코드 최신 공격 기법

- 네트워크 패킷 분석

- 악성코드 탐지 및 분석

- 침해사고 사례 기반 공격 기법 및 분석


정도로 강의가 진행된다. 물론 평가가 있다.... 총 3번의 평가가 있다. 1차에서 대략 80명은 떨어진다. 1차는 240명정도이며 2차는 160명 정도 교육 대상자이기 때문에 한 반에서 16명정도는 떨어진다고 보면 된다. 나의 경우, 악성코드는 처음 다루었는데 1차교육에는 악성코드가 중요했기 때문에 간당간당했다....


2차 교육



1차 교육에서 합격을 하면 2차 입과 메일이 온다.

대충 1차 교육이 끝나고 1달 정도 이후에 합격 유무를 사이트에서 확인할 수 있으며, 교육은 9월에 진행되기 때문에 한 달 반정도 이후 교육이 진행된다고 보면 된다.

2차 교육은 1차와 달리 거의 실습형으로 진행이 된다.

- 타임라인 분석

- 산업제어시스템 

- 공유기, 스마트홈 등


역시 3번의 평가가 진행된다. 1차는 길어봤자 1~2시간이었는데 2차는 다르다. 심지어 하루 종일 보기도 하였다. 복습이 제대로 이루어진 상태가 아니면 시험시간 8시간동안 괴로움을 맛볼 수 있을 듯 하다...... 실제로 어떤 교육생은 도중 포기를....


2차에서는 대략 40명 정도 탈락이 된다. 탈락한 사람은 단순 수료증만 받게 된다. 나머지 합격한 사람들은 수료+인증서를 받게 되는데 거의 8개월동안 교육이 진행되는데 수료와 인증의 차이는 어마어마하다. 물론 회사에서 수료증만 가지고 간다면 온갖 갈굼을 먹을 수도...


인증식은 12월에 진행이 되었다. 

k-shield 인증자만 참석하는 것이 아닌 정보보호 동아리 회원과 버그바운티 우수 신고자들도 왔다.






나라에서 진행하는 좋은 프로그램

많은 사람들의 인증을 기원하며..

정보보안기사 합격과 k-shield 인증을 시켜준 Kisa에 무한한 감사를 드리며... 

정보보안기사를 검색하면 항상 합격률이 연관 검색어에 출력되는 것을 확인할 수 있다.

https://kisq.or.kr/ 에서 공지사항에는 나오지 않는다. 그 이유는 작성일을 기준으로 업데이트가 되어, 최신글로 출력되지 않기 때문이다.
다만, 공지사항 더보기에서 78번 글을 보면 업데이트 됨을 확인할 수 있다.

해당 게시글은 2017년 1월 6일 기준이다.


 


표를 보면 매년 응시자의 수가 증가하는 것을 확인할 수 있다. 다만, 8회 실기가 쉬웠다는 글이 많았음에도 불구하고 어렵다던 7회 실기보다 8회 실기 합격률이 낮음을 확인할 수 있다.

하지만 합격률은 단지 수치일뿐.....

+ Recent posts