정보보안 스터디 - 19주차 5일 - 악성코드의 종류, 분석 과정
☞ 악성코드 분석의 개념
악성코드 분석이라는 것은 특별한 게 아니고 기본적으로
앞서 배운 리버싱을 통해서 PE 파일의 libraries를 확인하여 나온 각각의 dll과 함수들을 분석하는 것입니다.
☞ 악성코드의 종류
스파이웨어 사용자의 동의 없이 피해자의 시스템에 설치되어 정보를 수집하는 프로그램을 말합니다. 신용 카드와 같은 금융 정보 및 신상정보, 암호 등 각종 정보를 수집합니다. |
다운로더 가장 많이 사용해왔고 사용하고 있는 멀웨어죠. 안랩 블로그의 통계를 보면 알 수 있듯이 다운로더로는 다운로더 자체는 위험하지 않지만 2차적인 공격으로 랜섬웨어든 인포스틸러이든 백도어든 다른 악성코드를 다운받을 수 있기 때문에 위험한 것입니다. 예를 들어, 정상적으로 생각한 프로그램이지만 사실은 다운로더인 파일을 실행했을 때 프로그램이 실행되면서 외부 공격자의 서버(웹사이트)에서 랜섬웨어 파일을 가져올 수 있으며 심지어 실행시킬 수도 있습니다. 랜섬웨어를 가져오는 순간 윈도우 방화벽에서 탐지 후 차단할지는 모르겠지만 다운로더 자체로는 문제가 없어서 1차적으로 백신에 탐지가 안되는 부분은 확실히 수월하다고 볼 수 있습니다. |
드로퍼 보통 PE파일에 악성 PE파일이 숨겨져 담겨있는 경우가 있습니다. 그리고 파일 실행 시 숨겨진 악성 파일을 실행시킬 수도 있습니다. 다운로더로 드로퍼를 받은 뒤 악성파일을 실행할 수도 있고 드로퍼로 다운로더를 받은 뒤 악성파일을 실행할 수도 있고 섞어서 사용하기도 합니다. |
트로이목마 트로이 목마는 정상적인 프로그램인 듯 보이지만 사실은 악성코드를 담고 있으며 정상적으로 프로그램이 실행되면서 그 동안에 프로세스를 감추고 시작 프로그램 레지스트리에 등록하고 악성코드들을 다운로더 역할을 할 수도 있습니다. 아니면 간단하게 사용자 입장에서 실행되지도 않고 뭐지? 지울려고 하는 순간 레지스트리에 등록하거나 파일을 다른 경로에 옮겨두고 몰래 서식할 수도 있습니다. 너무나 무궁무진합니다. |
백도어 정상적인 인증 과정을 거쳐 프로그램이 들어온다면 백신에 분명 걸리겠지만 백도어라는 구멍을 통해서 들어오면 백신을 우회할 수 있으며, 공격자의 접근이 자유롭습니다. |
인포스틸러 피해자 시스템 파일내용이라든지 웹 브라우저의 방문기록 등 완전히 시스템을 장악하지는 않았지만 이런 잡다한 기록 정보들을 가져옴으로써 2차 피해를 일으키며 개인정보에 영향을 받을 수 있습니다. |
애드웨어 시스템 내부에 영향을 주지 않으니 그렇게 위험하지는 않습니다. 동의 하지 않고 광고를 띄우는 방식입니다. 하지만 사실 마음만 먹으면 악성코드를 다운로드 시킬 수 있기 때문에 이런 애드웨어가 깔려있는 것만으로도 보안적으로 침입이 되었다고 할 수 있습니다. |
루트킷 백신의 탐지를 방지하는 악성코드를 말합니다. 그러니까 예를 들어 악성 프로그램이 실행은 되었지만 프로세스 작업관리자에는 뜨지 않을 수 있습니다. 루트킷을 이용해서 우회한 것이라고 보면 됩니다. |
봇넷 공격자는 직접 공격하는 것이 아니라 C&C 서버에 명령어를 전송하여 봇넷으로 공격합니다. 바이러스에 감염된 시스템이라면 봇넷이 될 수 있습니다. |
파일리스 실행 파일(EXE)이 존재하지 않고 악성코드뿐인 것입니다. 이 악성 코드를 문서파일에 삽입하고 실행하면 악성코드가 실행되어 메모리에 올라갑니다. 실체가 없어 백신에 탐지가 어렵습니다. |
따라서 외부 다운로드 사이트나, 블로그에 올려진
게임 크랙, 문서 크랙 등 다운로드를 함부로 받으면 안되는 이유입니다.
루트킷을 이용하여 백신에 탐지당하지 않도록 우회하면 그만이기 때문입니다.
백신이 업데이트하는 것처럼 루트킷도 공격자들은 업데이트하여
백신이 업데이트 할 동안에는 탐지되지 않고 사용이 가능합니다.
요즘은 exe파일을 블로그나 이메일로 직접 올릴 수 없으니,
또한 다운을 받자마자, 실행을 할 때 백신이 탐지하기 때문에
요즘은 문서로 공격을 시도합니다.
문서 자체는 1차적으로 안전하다고 판단합니다. 프로그램을 실행하는 것이 아니기 때문입니다.
하지만 매크로를 활용하여 공격자 웹서버에서 악성파일을 다운로드 받아오게 됩니다.
매크로를 실행한다는 경고창만 거치면 임의의 공격이 가능해집니다.
현재 버전은 MS가 패치를 한상태인지는 모르겠지만 문서외에도 이런 형식의 파일은 아직도 유효한 것으로 보입니다.
☞ 악성코드 분석 과정 및 방법
정적분석과 동적분석이 있는데
기초/고급으로 나뉩니다.
선수 지식
dll의 역할과 파일 관련 함수에 대해서 알고 있어야 합니다.
kernel32.dll 파일 열거나, 읽기, 쓰기, 실행 등을 하고 프로세스 실행, 종료를 합니다. 시스템의 전반적인 모든 동작과 관련 있습니다. |
advapi32.dll 크게 2가지 입니다. 로그인마다 매번 실행하도록 합니다. 윈도우 서비스 관리자(악의적인 동작을 실시하는 파일을 등록시킴) 레지스트리 키 변조 (악성파일을 regedit에 등록함) |
user32.dll gdi32.dll 주로 그래픽 관련 입니다. |
wsock32.dll ws2_32.dll 네트워크 연결 및 소켓 통신 관련 |
wininet.dll ftp, http 인터넷 연결 관련 |
api 함수명+ msdn 으로 기능 내용 및 리턴값을 검색해봅니다.
기초 정적 분석
1. exeinfo에서 패킹이 되었는지 유무 확인(패킹 또는 프로택트되어 IAT정보가 안보이면 분석이 안되기 때문)
2. dependency 에서 dll은 몇개이고 함수는 어떻게 구성되는지 확인
3. PEView에서 구성 및 IAT 등 상세 주소 확인 >> 정보를 문서화 해둡니다.
cmd창에서 downloader.exe에 대한 문자열 strings를 txt 파일로 만들어 확인합니다.
공격자의 어떤 웹서버 주소에서 어떤 파일이름으로 가져올 건지 확인이 가능하며
어디에 저장될지도 나와있습니다.
실행할지도?
bintext라는 따로 프로그램을 사용해도 되지만 strings가 가장 간편하고 확실합니다.
(환경변수로 설정해도 편합니다.)
4. Virus total에서 바이러스 탐지
이 때 실시간으로 분석하는 것이 아니라, 등록된 악성파일 해시값을 기준으로 판단합니다. 그렇기 때문에 빠릅니다.
그 외로도 Detail에서 더 자세한 내용을 알 수 있었습니다.
strings에 대한 자세한 내용은 나오지는 않지만
어떤 주소에서 받아오는 지 등이 나오긴 합니다.
5. PEstudio
해당 프로그램으로 위의 작업을 모두하기 때문에 확실히 편합니다.
시간이 없을 때나 마지막에 총정리하기 위해 사용합니다.
하지만 정확한 분석을 위해서는 정석대로 위의 과정을 밟아야 되겠죠.
virus total 까지 분석정보를 가져오는 것이기 때문에
네트워크를 기반으로 작동한다는 뜻입니다.
굉장히 보기 편하게 정리되었고
여기서 주목해야할 점은
X표시입니다. X표시는 dll, 함수 중에서 어떤 것이 악성기능을 할 가능성이 높은지
체크해둔 것입니다.
쉽게 보일 수 있지만 기초 분석이 가장 중요합니다.
기초에서 확실히 하지 않는다면 엉뚱한 방향으로 분석하게 될 수도 있습니다.
또한 기초분석이 고급분석보다 오래걸리기도 합니다.
많은 힌트를 가지고 고급분석으로 들어간다고 생각하면 좋을 것 같습니다 :)
기초 동적 분석
세부적으로 분석하지 않고
프로그램 실행함을 기준으로 전 / 후의 차이를 비교합니다.
프로세스 등의 빠른 실행은 눈으로 확인하지 못하기 때문에
sysanalyzer 라는 분석 도구를 이용합니다.
기본적으로 60초 딜레이 후 분석결과를 발표합니다.
메인 기능으로는 생성되었던 프로세스가 뜨는데 이 때 결과로 나왔다고 해서 다 악성 프로세스가 아니라
정상프로그램도 실행되면 리스트됩니다. 그렇기 때문에 아무것도 실행되지 않은 상태에서 프로그램을 돌리는 것이 적합합니다.
프로세스가 생성되었다가 사라졌다면 PID/PPID(자식/부모 관계)는 어떻게 되는지 확인할 수 있습니다.
registry 수정이 되었는지도 확인이 가능합니다.
또한 procexe에서는 작업 관리자의 역할과 같지만 기능이 조금 더 있고
부모프로세스에 의해 생성되는 자식 프로세스를 좀 더 편하게 확인할 수 있습니다.
정적분석 전에는 가상환경을 구성해두고 스냅샷을 꼭 찍어둡시다.
고급 정적 분석
IDA
정품을 사용한다면 F5(pseudoc) >> C언어를 추측하여 구현해주는 기능을 제공합니다.
그래프 view로 봤을 때
아까 strings에서 봤던 부분처럼 어셈플리 명령어로
함수(API)를 실행합니다.
loadlibrary, urldownloadtofilew: 일단 공격자의 웹사이트에서 test.exe 파일명으로 다운 받습니다.
(여기서 인자값들은 offset 주석 처리 같이 되었습니다.)
winExec: 다운받은 test.exe 파일을 실행합니다.
참고로 특히 다운로더는 짧은소스코드기 때문에 쉽게 활용가능합니다.
예를 들어 게임앱, 크랙 프로그램에 위장해두고 사용합니다.
고급 동적 분석
Ollydbg
쭉 실행하는 게 아니라 하나하나 실행하면서 어떤
반응이 일어나는 지 세부 점검합니다.
어떻게 반응하는지 명령어 단위로 분석하기 때문에
어떻게 대응해야할지 방법까지 도출이 가능합니다.
처음에 메인함수로 가서 (PUSH*3번, MOV EBP 가 있는 곳)
CALL함수가 있다면 F7을 실시해 함수내용을 분석합니다.
+) 추가로 EDR(엔드 포인트 탐지), SIEM(보안 정보 및 이벤트 관리) 시스템을 구현해보기에 좋은 프로그램은
elastic이라는 솔루션입니다.
즉 보안 관제에 쓰일 수 있는 EDR, SIEM 솔루션을 무료로 제공해 주고 있습니다.심지어 docker 이미지로도 제공하기 때문에 간단하게 실행할 수 있도록 솔루션을 구축할 수 있습니다.
이렇게 방어 관제 시스템을 만들어 보고 웹서버의 쉘을 장악해보든 루트킷을 통해 백신 탐지 우회 후 다운로더 악성코드로 랜섬웨어를 다운받게하든 시스템을 뚫어보는 연습을 하기에 좋습니다.