
캐빈 부분 분석
description: Bluetooth-Worm:SymbOS/Cabir 분석
읽기 시작하기 전에, 공지 하나 할게 있음 : 여기 적힌 모든 내용은 그냥 걸러들어. 나는 SymbianOS 개발자도, SymbianOS 환경에 익숙한 사람도 전혀 아니니까.
그런데 왜 이렇게 오래된 걸 분석하는 거지? 음, 왜냐하면 이게 리모트 해킹에 입문하기 가장 쉬운 방법이기 때문이야. 요즘 이런 유형의 짓은 1백만 달러 가치의 ndays/0days로 이루어지거든 🤑🤑🤑. 그리고 나는 아직 그런 유형을 할 만한 전문성이 부족하고.
좋아, 이제 이 개꼴을 치웠으니 본론으로 들어가자. Cabir이 대체 뭐냐? Symbian 휴대폰에서 실행되는 블루투스 웜이야. Symbian 폰이 뭔지, 그런 게 뭔지 궁금한 사람들을 위해 설명하자면, 기본적으로 ARM을 실행하는 폰이라서 새로울 게 하나도 없어 :) 더 간결한 정보 (https://en.wikipedia.org/wiki/S60_(software_platform))
이제 우리는 이 소스 코드가 온라인에 있다는 행운을 얻었어(vxug 제공) (SymbianOS.Cabir.7z). 이제 그걸 참고 자료로 사용할 거지만 솔직히 그건 좆까. 내가 이걸 하는 다른 이유 중 하나는 ARM을 만져보고 싶기 때문이야. 그래서 우리는 이걸 소스/어셈블리/에뮬레이터/디버깅/스니핑 관점에서 볼 거야.
좋아, 그럼 #1 대체 어떻게 소스 코드를 컴파일하지?
음, 그렇게 복잡하지 않아...
먼저 carbide ++를 설치하고(http://www.mediafire.com/file/6z54qrceef73x9s/Carbide_cpp_v2_7_en.exe/file)(https://gist.github.com/artem78/cb2b9650af186844f7b5654964676284에서)
다음으로 아무 perl 엔진이나 설치하고
다음으로 nokia pc suite를 설치하고(https://www.usitility.com/nokia-pc-suite/)
SDK 설치(http://www.mediafire.com/file/9uc7fjb2ynmxlud/s60v3.1_SDK.zip/file )
c/c++ 플러그인 설치 (https://ia800905.us.archive.org/7/items/nokia_sdks_n_dev_tools/s60_open_c_cpp_plug_in_v1_7_en.zip)
그리고 짠, 환경이 준비됐어 :)
참고로 windows 7을 쓰는 게 좋아. windows 10에서는 뭔가가 깨지고 제대로 작동하지 않더라고.
실제 환경 감염
TBD
이 부분에서는 여러분의 휴대폰을 탈옥(그래, 네가 제대로 들었어, 탈옥)해야 한다는 걸 알아둬. 어떻게 하는 거지?
리버스 엔지니어링 분석
좋아, 그럼 대체 이걸 어떻게 컴파일하는 거야? 꽤 좋은 질문이야. 그래서 내가 한 건 caribe\group 폴더에서 먼저 ABLT.BAT를 실행한 거야, 이렇게.
좋아, 다음으로 우리가 할 일은 SDK가 설치된 곳으로 가서 플랫폼 폴더(내 경우 S60_3rd_fp1)를 식별하고, epoc32 폴더를 찾아 buid 폴더로 가서 user 폴더, username 폴더를 선택하고, 그다음 디렉토리를 두세 개 더 들어가면 이런 모양의 폴더에 도달하게 돼.
이게 현재 경로야. 대략적으로 너희가 있어야 할 위치와 비슷할 거야 (C:\Symbian\9.2\S60_3rd_FP1\Epoc32\BUILD\Users\pwn\Desktop\CabirSourceCodes\caribe\group)
좋아, 다음으로 우리는 caribe 폴더(또는 네가 소스 코드를 이름 지은 대로)로 들어가야 해. 그러면 여기 보이는 것처럼 다른 이름을 가진 폴더를 찾을 수 있을 거야.
이게 뭐냐고? 음, 기본적으로 우리가 처음 ablt.bat를 실행하면(지금도 그 목적이 뭔지는 모르지만 어쨌든) pkg 파일을 빌드하기 위한 다양한 플랫폼 옵션이 나오고, 그걸로 sis 파일을 생성할 거야. 여기 주어진 경우 GCCE와 WINSCW가 보여. 기본적으로 ablt.bat build 명령을 실행하면 WINSCW(에뮬레이터 플랫폼에 부여된 코드네임)용으로 빌드할 거야. 소스 코드 컴파일 방법을 배우는 목적으로는 지금 GCCE를 사용할 거지만, 모르겠지만 arm 플랫폼용으로 선택해서 폰에 업로드하려 해도 과정은 동일해. 그래서 기본적으로 ablt build arm_whatever를 실행하고 여기까지와 똑같은 단계를 수행하면 돼. 좋아, 이제 GCCE 폴더로 가자
urel 폴더로 가면 caribe.app이라는 파일이 있을 거야. 거기서 명령줄을 열고 실행하고 싶을 거야.
그래서 이게 뭘 하는 거냐고??? 음, 기본적으로 우리는 sis 파일을 생성하는 makesis를 실행한 거야. 그래야 폰에 설치할 수 있지. 그리고 왜 caribe 소스 코드에서 sis 파일로 하냐고? 음, 기본적으로 makesis에 caribe.pkg를 지정해야 하기 때문이야. 좋아, 그럼 왜 build 어쩌구 폴더까지 찾아가는 그런 수고를 하는 거지? 음, -d 파라미터에 그걸 지정해야 .sis 파일을 생성할 수 있기 때문이야.
좋아, 이 방법은 이 글에서 참조하는 sdk v3에서만 작동해. 분명히 내가 실험하는 동안 symbian 전용 discord 서버의 한 개발자를 만났는데, 그가 cabir는 sdk v2용으로 코딩되었다고 지적했어. 그래서 내가 여기서 제시한 것은 쓸모없게 될 거야..... 그에게 연락할 수 있을 때 이건 tbd로 남겨둘게... 요즘 그는 discord에서 꽤 오프라인 상태라서...
좋아, 그럼 .sis 파일은 어떻게 리버스 엔지니어링하지?
간단히 말해 .sis 파일은 아카이브야. 그래서... 우리는 siscontents 애플리케이션을 사용해서 압축을 풀고, 그다음 .app 파일을 ida에 던지면 돼.
어셈블리 관점
전체 과정은 이렇게 생겼어
이제 그 폴더로 들어가서, 다음 두 폴더를 더 들어가면 app.app 파일을 얻게 돼.
좋아, 이걸 ida에 던져 보면.
좋아, 기본적으로 ARM exe야. 완전 끝내주네! 다음 주세요! 음, 네 주세요 ~~~
파일에 심볼이 있네, 예!!! 음, 그래. 이상한 이유로 우리가 디버그 심볼과 함께 바이너리를 컴파일했기 때문에 운이 좋았어!
그리고 기본적으로 코드도 있고 하니, 리버스 엔지니어링 과정은 대략 소스 코드 분석 챕터에서 설명한 것과 거의 같아 :)
스니핑 관점
안타깝게도 이건 할 수 없어. 내가 하려고 계획한 건 Fts4bt를 사용하는 거였는데, 이게 꽤 괜찮아 보였거든(https://www.diva-portal.org/smash/get/diva2:24278/FULLTEXT01.pdf)
하지만 그 제품은 수명 종료(EOL)에 도달한 것 같아. 혹시 이 부분을 할 수 있다면 나에게 dm을 보내고 이 챕터를 완성하기 위해 pull request를 보내줘.
디버거 관점
그럼 이 섹션은 뭐냐!>>~> 음, 이에 대한 내 의견은 이래: usb를 통해 디버거를 연결하고 노키아 폰에서 직접 코드를 디버깅하는 방법을 배우는 것이 나와 너(독자)에게 경험이 될 만한 가치가 있긴 하지만, 지금 당장은 시간과 노력이 너무 많이 들어. (이미 꽤 지쳤거든... 미안, 다음 기회에.) 이게 쓸모없는 이유에 대한 또 다른 논거는 우리가 소스 코드와 특별히 설계된 symbian IDE를 갖고 있다는 거야. 그래서 우리가 할 일은 이거야. 우리는 Carbide++의 디버거를 사용해서 한두 개의 함수를 간단히 디버깅할 거야. 코드의 흐름은 sca 섹션에서 설명했고, 코드 분석을 어렵게 만드는 암호화나 안티-어쩌구 방법도 없기 때문에 독자가 직접 할 수 있어. 자... 가자!
솔직히
소스 코드 분석
좋아, 소스 코드에 접근할 수 있다는 사실을 활용해서 최대한 이득을 보자.
우리 디렉토리 구조는 이렇게 생겼는데 꽤 잘 정리되어 있어
자, src 폴더를 살펴보자
우리의 여정은 src 폴더, 정확히는 caribe.cpp에서 시작해. 왜냐고? 꽤 잘 정리되어 있긴 한데, 한 가지 눈에 띄는 게 caribe.cpp라는 파일이 있다는 거야. 뭔가 특별한 점이 있냐고? 아니, 그런데 나는 교육받은 추측으로 이 경우 29A(악성코드를 개발한 그룹)가 소프트웨어 개발자의 고전적인 접근 방식을 따랐다고 짐작했어. 앱의 주요 로직이 name_of_project.extension에 들어간다는 그 방식 말이야. 좋아, 그럼 이게 대체 어떻게 생겼냐고? 이렇게 생겼어, 젊은 피여
좋은데 이게 뭐냐? 솔직히 모르겠어. 하지만 추측을 좀 해 보자. 이름만으로 보면 CApaApplication은 이 애플리케이션의 메인이라고 추측할 거야. 이걸 구글에서 검색하면 이걸 보게 돼
좋아, 이제 뭐 어쩌라고?? 좀 더 파보자. CCaribeApplication을 살펴보자. 그런데 CCaribeApplication이 대체 어디 있지? CaribeApplication.h에 있어. 그게 어디냐고? inc 폴더에 있지, 브라더. 이렇게 생겼어
좋아, 이렇게 생겼어