악성코드소스코드분석 Jaewoo Shim Mar. 14. 2018
목차 팀프로젝트소개 수행내용 소스코드정적분석 컴파일후실행파일동적분석 제안서작성방식 보고서작성방식 채점기준및총배점 2
팀프로젝트소개 악성코드분석 lightaidra 소스코드가없는바이너리를분석할수있는역량을익히기에는시간상현실적으로어려움이있음 소스코드가있는악성코드를대상으로분석을수행 2000 줄정도 소스코드다운로드가능 : https://github.com/eurialo/lightaidra 3 ~ 4명의팀으로수행하는것을권장 팀원구성후조교에게전달 : 3월 14일 ( 수 ) 까지 제안서제출 : 4월 4일 ( 수 ) 까지 4주간수행후결과보고서제출 : 5월 2일 ( 수 ) 까지 3
팀프로젝트소개 임의의취약점등을이용해피해자의컴퓨터에악성코드를실행 lightaidra 4
팀프로젝트소개 해커의명령에따라동작 너에대한정보를알려줘 너의 PC 에저장된파일을줘 5
팀프로젝트소개 1000 만원을주지않으면, 너희서버를 1 시간동안서비스불가하도록만들겠다 기업또는공공기관 6
팀프로젝트소개 공격해라 공격해라 공격해라 공격해라 공격해라 기업또는공공기관 7
팀프로젝트소개 대규모트래픽발생 기업또는공공기관 8
수행내용 정적분석 소스코드정적분석 ~/include 폴더에는소스코드에서사용하는헤더파일 (~~~.h) 이포함 ~/source 폴더에는소스코드 (~~~.c) 파일이포함 README.md, Makefile, getbinaries.sh, docs 폴더내파일은분석 X 소스코드를분석해서어떠한기능을수행하는프로그램인지파악 9 TIP 소스코드에함수마다도움이될수있는주석이있습니다.
수행내용 정적분석 예시 int main(int argc, char *argv[]) { if (argv[1] == 0 argv[2] == 0) { printf("./lighthide [-encode -decode] [string]\n"); return(1); } else if (!strncmp(argv[1], "-encode", 7)) { encode(argv[2]); decode(encoded); printf("encoded[%s]:\n%s\n", decoded, encoded); } else if (!strncmp(argv[1], "-decode", 7)) { decode(argv[2]); encode(decoded); printf("decoded[%s]:\n%s\n", argv[2], decoded); } return(0); } 10
수행내용 정적분석 예시 나쁜예 int main(int argc, char *argv[]) { // main함수선언 if (argv[1] == 0 argv[2] == 0) { // 만약 argv[1] 이 0이거나 printf("./lighthide [-encode -decode] [string]\n"); // 출력 return(1); // 종료 } // 조건문종료 else if (!strncmp(argv[1], "-encode", 7)) { // 만약 argv[1] 이 -encode 라면 encode(argv[2]); // encode() 함수실행 decode(encoded); // decode() 함수실행 printf("encoded[%s]:\n%s\n", decoded, encoded); // 결과값출력 } // 조건문종료 else if (!strncmp(argv[1], "-decode", 7)) { // 만약 argv[2] 이 -decode 라면 decode(argv[2]); // decode() 함수실행 encode(decoded); // encode() 함수실행 printf("decoded[%s]:\n%s\n", argv[2], decoded); // 출력 } // 조건문종료 return(0); // 종료 } 11
수행내용 정적분석 예시 좋은예 int main(int argc, char *argv[]) { if (argv[1] == 0 argv[2] == 0) { printf("./lighthide [-encode -decode] [string]\n"); return(1); } else if (!strncmp(argv[1], "-encode", 7)) { encode(argv[2]); decode(encoded); printf("encoded[%s]:\n%s\n", decoded, encoded); } } else if (!strncmp(argv[1], "-decode", 7)) { decode(argv[2]); encode(decoded); printf("decoded[%s]:\n%s\n", argv[2], decoded); } return(0); main 함수는사용자에게옵션을입력받아 encode, 또는 decode 역할을수행하여결과값을출력해주는함수이다. 12
수행내용 동적분석 컴파일후악성코드를직접사용해보고, 동작을분석 Lightaidra는해커가여러기능을수행할수있도록만들어진악성코드 어떤기능을수행하는악성코드인지? 어떤식으로동작하는지?( 커맨드, 환경구성등 ) 13
수행내용 동적분석 환경구축 - 예시 Windows 공격자 Virtual box Ubuntu linux(16.04) - 피해자 Windows - 공격자 IRC Server Linux - 피해자 채팅방생성 커맨드전송 채팅방접속 커맨드전달 결과전달 14
수행내용 동적분석 공격자측클라이언트설치 : hexchat https://hexchat.github.io/downloads.html 15
수행내용 동적분석 공격자측클라이언트설치 : hexchat 16
수행내용 동적분석 공격자측클라이언트설치 : hexchat 더블클릭하여수정후엔터 아이피주소 : 220.149.250.147/6667 연결이안될시조교에게연락 수정완료후 close 17
수행내용 동적분석 공격자측클라이언트설치 : hexchat 오른쪽과같이접속이수행되는것을확인 두번째 join the channel 에본인이생성할대화방이름입력 18
수행내용 동적분석 공격자측클라이언트설치 : hexchat 아래와같이대화방이생성되면, 이후피해자가접속될대화방생성완료 대화창에다음과같이입력 : /topic # 자기대화방이름.join # 자기대화방이름 19
수행내용 동적분석 피해자는 lightaidra 의 config.h 파일을분석해서변경후 $ make x86_64 $./x86_64 대화방에이상한계정이접속되었다면악성코드동작이성공 이후정적으로분석을수행시파악된명령어를사용해보면서분석수행 20
팀프로젝트소개 - 제안서 양식및분량 자유 팀별로 1부제출 제안서에반드시포함되어야하는내용 팀명 팀원이름 / 학번 / 이메일 - 팀장이누구인지표기 IRC 통신에대한개략적설명 분석을수행할환경 분석에사용할도구 일정 ( 간트차트 ) 4 월 4 일수요일까지 21
팀프로젝트소개 - 보고서 양식및분량 자유 팀별로 1부제출 보고서에반드시포함되어야하는내용 제안서에기입했던내용들 환경과도구는분석시다르게이용했을경우실제사용한내용을작성 소스코드분석내용 ( 소스코드주석달아제출하지마세요 - 감점 ) 각 *.c 파일의역할 무슨기능을하는지? 각함수의역할 ~ 기능을수행하는함수이다. 컴파일후실행내용 결론 어떤기능을수행하는악성코드인지? 어떤식으로동작하는지?( 자세하게 ) 어떤분석환경을어떻게갖추어어떻게실행시켜확인했는지? 이악성코드는어떤환경에서무슨기능을수행하는악성코드다. 내가보안담당자라면어떻게해당악성코드를탐지및차단할것인지? 5 월 2 일 ( 수 ) 까지 22
채점기준및총배점 과제물반영비율내팀프로젝트비중 : 10% 과제물반영비율내 BoF 과제 비중 : 5% 과제물반영비율내 SQLi 과제 비중 : 3% 과제물반영비율내패킷과제 비중 : 2% ---------------------------------------------------------------- SW보안개론과제물반영 비율 : 20% 팀프로젝트채점기준 (100 점만점이며 50 점부터시작 ) 이전슬라이드내반드시포함되어야하는내용미기재시감점 개당 -5 주요키워드가들어가있지않을시감점 (10개선정 ) 개당 -5 키워드는채점이완료된이후에공개예정 키워드만으로보고서를작성하는경우방지 Hint) IRC, 봇, Synflood, config.h 포함 10가지 23
QnA 조교이름 : 심재우 이메일 : tlawodn94@gmail.com 연구실 : 미디어센터 504호 서버연결이안될시 : 010-3377-5148 24
25