본문 바로가기

분류 전체보기

(36)
[CodeEngn] Malware Analysis L08 코드 엔진 Malware Analysis 마지막 문제이다. 마지막 문제이니만큼 Flow Chart가 굉장히 길다. 이런 Flow로 코드를 분석하는 건 많이 해보지 않아서, 긴 Flow에 먼저 겁을 먹게 된다. 뭐 간단하게 대충 훑어보자. 문제에서 찾아야 할 것은 다른 악성코드를 실행하는 부분을 찾는 것이다. '실행'이 키 포인트이다. 다운로더, 드로퍼 등 악성코드에서 다른 악성코드를 실행시키는 것은 흔한 일 같다. 그래서 이 문제를 푸는 것이 꽤 도움이 될 것 같다(악성코드 분석에서). Flow chart를 볼 때 우리가 볼 수 있는 것은 한정적이다. 문자열 몇 개, 함수 이름 몇 개, Flow(True or False) 훑어보니 다음의 몇 부분이 눈에 띈다. .inf라고 쓰여있다. inf는 검색해 보니..
[CodeEngn] Malware Analysis L07 일곱 번째 문제이다. 주어지는 Flow는 6번 문제와 동일하다. 접속이 안될 경우 몇 ms 단위로 재접속을 하는지 알아내면 된다. 해당 부분은 다음 Flow이다. http://어쩌고 하는 사이트에 접속을 시도하고, 접속 실패 하면, 밑에 Flow에서 Sleep 함수를 사용해 잠깐 쉬었다가 재접속을 시도한다. Sleep 함수는 다음과 같다. https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-sleep Sleep function (synchapi.h) - Win32 apps Suspends the execution of the current thread until the time-out interval elapses. learn..
[CodeEngn] Malware Analysis L06 6번 문제이다. 코드 엔진에는 악성코드 분석에 대해 8문제가 있으니, 이 문제를 풀면 두 문제가 남는다. 이 문제에서는 악성코드 Flow의 일부를 제공해 주는데, pdf 파일로 제공된다. 이렇게 생겼는데, 화질이 좋지 않으니 직접 다운로드한 파일을 참고하자. 문제에서 구하라고 한 것은 Thread Mutex가 무엇인지이다. 그렇다면 먼저 Thread Mutex에 대해 알아야 할 것이다. 구글링 해보면 좋은 자료가 많다. 간략히 이해한대로 설명하면, 여러 개의 쓰레드가 사용되고, 공유 자원이 사용될 때 문제점이 발생한다. 두 개 이상의 쓰레드가 동시에 자원에 접근하게 될 때 하나 이상의 쓰레드의 작업이 제대로 적용되지 않는 문제점이다. (너무 간략하게 설명했다. 뮤텍스에 대해 좋은 예를 들어 설명해주는 글..
[CodeEngn] Malware Analysis L05 이번에도 3번 문제처럼 무엇을 하는 함수인지 분석하는 문제이다. int Malware_L05( char *StartOfData, char *Output, int SizeOfData) { int encoded = 0, i, l = 0; char Table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; long buffer, buffer2; do { ... for(i = 3 ; i >= 0 ; i--, l++) { buffer2=buffer; buffer2 &= 0x3f; *(Output + i)=Table[buffer2]; buffer>>=6; } Output += 4; encoded += 4; SizeOfData -= 3;..
[CodeEngn] Malware Analysis L04 이번 문제는 파일이 없는 진짜 '문제'이다. PHP 설정파일에서 SQL Injection을 방지하기 위한 옵션은 무엇일까. 그냥 "php sql injection" 이런 식으로 검색하면 수많은 내용이 나온다. 이 많은 걸 일일이 쳐볼 수는 없는 노릇이다. 또 다른 문제점은 이 문제가 만들어진지 꽤 됐다는 것이다. 자세히는 모르지만 대략 2012년 즈음에 만들어진 문제들 같다. (확실하지 않다) 가장 최신의 패치를 적용하는 것이 보안에 있어서 가장 좋겠지만, 이 문제는 이 문제가 만들어졌을 때의 패치 내용을 적어야 한다. 다행히도 문제에서 힌트가 있다. php 설정파일에서의 sql injection을 방지하기 위한 옵션이다. 그럼 일단 php 설정파일에 대해서 알아보자. 음.. php 설정파일은 php.i..
[CodeEngn] Malware Analysis L03 이번엔 '무엇을 하는' 함수인지를 알면 된다. 문제코드가 정말 짧다. (맘에 든다) u_short Malware_L03(u_short * data, u_short length) { register long value; u_short i; for(i=0 ; i > 1) ; i++) value += data[i]; if( (length & 1) == 1 ) value += ( data[i] > 16 ); return (~value); } 매개 변수는 두 가지로, data와 length이다. 함수 안에서 value라는 변수를 선언해서, for 문을 통해 data의 값들을 더해준다. 처음에는 대충 훑어보고, 난독화 혹은 암호화인가 생각했다. 그런데 아니어서 조금 더 집중해서 쳐다봤더니, 입력..
[CodeEngn] Malware Analysis L02 이번엔 '무엇'을 공격하는 것인지 찾아야 한다. char body[]= "\r\n\r\n" "\r\nSelect \"DAV:displayname\" from scope()\r\n\r\n" "\r\n"; CScannerMalware_L02::CScannerMalware_L02() { m_sScannerName.Assign("Malware_L02"); } void CScannerMalware_L02::StartScan(const CString &sHost) {bool bSuccess=false; if(ScanPort(sHost.CStr(), 80)) {g_cMainCtrl.m_cIRC.SendFormat(m_bSilent, m_bNotice, m_sReplyTo.Str(), "%s: scanning ip %..
[CodeEngn] Malware Analysis L01 악성코드 분석 첫 번째 문제. 문제들을 보면 악성코드 소스의 일부분이라고 되어있다. 소스 코드의 일부분이므로 실행되지 못할 것이기 때문에, 로컬에서 압축을 풀고 코드를 볼 수 있다. # LAYER 2 addr_in.sin_family=AF_INET; addr_in.sin_port=htons(TargetPort); addr_in.sin_addr.s_addr=TargetIP; # IP HEADER ipHeader.h_verlen=(4