예전에 미리 작성해놓고.. 한참 바쁘다가 이제서야 올리게됬네요. 오늘은 플래시 파일. 즉 SWF안에 있는 enableDebugger에 대해 알아보고, Key를 크랙하는 법에 대해 볼까합니다.
왜 SWF 내 DEBUG Password를 Crack 할까?
이 보안 취약점은 아주 간단한 취약점입니다. 또한 영향력도 낮지요… 그러나 요즘 대세인 웹 게임이라면 이야기가 달라집니다. 웹 게임들은 플래시 기반으로 동작하는 게임이 많고 중요한 부분은 api로 처리하지만 swf 자체에도 많은 기능과 로직이 담겨있습니다. 이러한 swf를 디버깅하지 못하도록 막아주는것이 enableDebugger2 입니다. 이 옵션을 통해서 SWF에 디버깅을 제한할 수 있는 설정을 걸 수 있고 허용된 password를 가진 사용자만 SWF를 디버깅할 수 있습니다.
다만 이 부분이 개발하시는 분들이 귀찮거나, 인지되지 않아 설정을 안하거나 아주 간단한 내용으로 패스워드를 걸기 때문에 공격자에게 노출될 수 있습니다.
안걸려있다면 바로 디버깅하여 로직을 틀어버릴 수 있겠지만.. 오늘의 내용은 패스워드가 걸려있다. 아 정확히 말하면 쉬운 패스워드가 걸려있을 때 공격자는 어떠한 방법으로 Key를 얻어내어 디버깅할 준비를 할 수 있는지 이야기할까 합니다.
Decompiler를 이용하여 DEBUG 정보 획득하기
일단 우리가 필요한 enableDebugger2에 대한 정보는 SWF안에 들어있습니다. 이 정보를 찾아야 Crack 부터 Debugging까지 단계를 수행할 수 있겠지요. 무료이며 쓸만한 Flash Decompiler를 2개정도 사용하고 있습니다. 하나는 GUI, 다른 하나는 CUI이며 상황에 따라 골라쓰고 있지요. 바로 FFDEC와 FLASM입니다.
FFDEC를 이용한 Decompile https://www.hahwul.com/2015/03/31/swf-ffdec-jpex-free-flash-decompiler/
ffdec 설치 후 실행하셔서 swf 를 까보면 actionscript 코드와 함께 많은 데이터가 확인됩니다. 이 중 잘 찾아보시면 enableDebugger2 가 설정된 부분을 찾을 수 있고 값을 얻어낼 수 있습니다.
FLASM을 이용한 Decompile flasm - assembler and disassembler for Flash (SWF) bytecode
#> apt-get install flasm
#> flasm
Flasm 1.62 build Jun 2 2013
(c) 2001 Opaque Industries, (c) 2002-2007 Igor Kogan, (c) 2005 Wang Zhen
All rights reserved. See LICENSE.TXT for terms of use.
Usage: flasm [command] filename
Commands:
-d Disassemble SWF file to the console
-a Assemble Flasm project (FLM)
-u Update SWF file, replace Flasm macros
-b Assemble actions to __bytecode__ instruction or byte sequence
-z Compress SWF with zLib
-x Decompress SWF
Backups with $wf extension are created for altered SWF files.
To save disassembly or __bytecode__ to file, redirect it:
flasm -d foo.swf > foo.flm
flasm -b foo.txt > foo.as
Read flasm.html for more information.
ffdec로 찾는것이 편하긴하지만 커맨드라인에서 확인하기 쉽도록 flasm을 사용하겠습니다. -d 옵션을 주어 swf 파일을 디컴파일합니다. output 중 enableDebugger2가 설정되어있는지 확인합니다.
#> flasm -d test.swf | grep enableDebugger
enableDebugger2 '$1$Qy$73m750ww5yD9X/Ri1maWD0
명령을 실행해보니 아래와 같이 hash화된 값이 나타납니다. 이 값을 파일로 만들어 jtr로 crack 하면 끝나겠네요.
John the Ripper를 이용한 DEBUG Password Crack
JTR(John the Ripper)는 패스워드 크랙으로 잘 알려진 툴 입니다. 개인적으로 좋아하는 툴이기도 하고 Crack 성공률도 괜찮은 편이라 자주 사용합니다. 일단 아까 ffdec나 flasm으로 얻어낸 hash 값을 복사해둡니다.
그리고 crack을 위해서 해당 값을 넣은 txt 파일을 하나 만들도록 하겠습니다.
#> echo "[keydata]" > crackKey.txt
or
#> vim crackKey.txt
KEY
echo로 넣으셔도 되고 vim이나 nano로 편집해서 넣으셔도 됩니다. keydata에는 아까 찾은 키 값이 들어가게 됩니다. 혹시나 괄호까지 넣은분이 있을까 하여 cat으로 확인하고 가도록 하겠습니다.
#> cat crackKey.txt
$1$Qy$73m750ww5yD9X/Ri1maWD0
이제 jtr로 crack을 하면 됩니다. –show 옵션을 주어 output을 확인합니다.
#> john testPw.txt --show
?:
1 password hash cracked, 0 left
Password는 특수문자 “?:” 의 hash 값이였네요. :)