[HACKING] iOS App 정적 분석도구 IDB (Ruby gem package “IDB” for iOS Static Analysis)

최근에 루비 패키지 중 재미있는 툴을 하나 발견헀습니다. iOS 분석용 툴인데, Cycript, pcviewer, dumpdcrypt 등 분석 툴들을 활용해서 자동으로 분석해주고, 이를 한군데 모아서 볼 수 있는 정적분석 도구입니다.

개별적으로 툴 돌려가면서 판단하는 것도 좋지만, 한번에 잘 정리된 툴은 불필요한 시간을 줄여주고 분석가에게 조금 더 가치있는 시간을 부여할 수 있기 때문에 익혀두고 활용하면 좋을거라 생각됩니다.

오늘의 주제는.. idb 입니다.

Install

idb는 루비로 만들어진 프로그램입니다. 그리고 Gem에도 등록되어 있기 때문에 몇몇가지 내용만 잘 확인하면 설치는 아주 쉽습니다.

우선.. gem을 통한 설치이던, git에서 직접받아서 bundle을 통한 설치이던 공통적으로 cmake 같은 개발툴과 libxml 관련 라이브러리는 필수고 설치해야합니다. (gem이나 bundle이나 같은건데..)

#> apt-get install cmake libqt4-dev git-core libimobiledevice-utils libplist-utils usbmuxd libxml2-dev libsqlite3-dev -y

그러고 gem을 통해 idb를 설치해줍니다.

#> gem install idb

or ..

직접 과정을 보고싶다면.. git을 통해서 소스코드를 받고 설치해도 좋습니다.

#> git clone https://github.com/dmayer/idb #> cd idb #> bundle install

완료 후 idb를 실행하면 됩니다.

#> idb

TroubleShooting

저는.. 초기에 몇가지 문제가 있었습니다. 우선 libxml 관련 문제.

#> gem install idb

Building native extensions.  This could take a while...
ERROR:  Error installing idb:
ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/2.3.0/gems/libxml-ruby-3.1.0/ext/libxml
/usr/bin/ruby2.3 -r ./siteconf20180215-8846-1f5z089.rb extconf.rb
checking for libxml/xmlversion.h in /opt/include/libxml2,/opt/local/include/libxml2,/usr/local/include/libxml2,/usr/include/libxml2... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
   --with-opt-dir
   --without-opt-dir
   --with-opt-include
   --without-opt-include=${opt-dir}/include
   --with-opt-lib
   --without-opt-lib=${
[....]

사실 초기에 라이브러리 다 안깔고 시작한것도 문제가 있었습니다만.. ruby-libxml까지 설치해서 깔끔하게 해결했습니다.

#> apt-get install cmake libqt4-dev git-core libimobiledevice-utils libplist-utils usbmuxd libxml2-dev libsqlite3-dev -y

#> apt-get install ruby-libxml

Device 설정 및 App 선택

idb는 usb ssh 연결이 기본 설정으로 되어있습니다. 물론 이게 안전한 방법이긴 하지만.. 개인에 취향에 따라 무선 환경에서 할 것인지 usb 통해서 할 것인지 설정할 수 있습니다.

file > setting > Device Config

이후 앱을 선택해서 정적분석을 진행할 수 있는데요, 우측에 앱 선택 버튼으로 선택 후 잠시 기다리면 기본적인 정보를 로드해서 보여줍니다. 추가로 암호화 등 기본적인 바이너리 분석 또한 바로 해두면 편합니다.

그리고 테스트기기(iOS)에는 분석에 사용되는 툴이 설치되어 있어야합니다. 물론 idb가 체크해주고, 바로 설치또한 가능합니다

대체로 Device 연결 시 창이 나타나며, 상단의 Status 버튼으로 호출 가능합니다.

URL Scheme

우선 URL Scheme이란 앱 내부,외부(다른앱,웹 등)에서 특정 액티비티를 호출한다던가 기능 수행을 위해서 만들어진 Scheme 입니다. iOS 말고 안드로이드에서도 사용되고 있고 앱의 기능성을 위해 많이 사용되죠. 하나 예시를 들면 웹뷰 제어같은 기능이죠.

testapp://open?url=http://www.hahwul.com

URL Scheme에서도 웹 URL과 같이 인자값을 받고, 처리할 수 있기 떄문에 대다수의 공격기법들이 동등하게 적용됩니다. 대체로 Redirection, XSS부터 각종 취약점 종류 모두 체크해볼 필요가 있지요.

이런 URL Scheme은 앱 내부에 작성된 코드를 보고 직접 판단하거나, 앱에서 쓰이는 요청들을 분석해서 하나하나 찾아야합니다. 굉장히 노가다고, 툴을 통해 분석해도 모든 Scheme과 파라미터명, 사용처를 알기는 쉽지 않지요. idb에선 URL Handler란 탭을 통해 URL Scheme을 찾아줍니다.

솔직히 idb에서 가장 맘에들었던 부분입니다. 동적분석툴인 Snoop-it에서도 URL Scheme을 체크해주지만 Snoop-it의 경우 32비트만 지원하기 때문에 대다수의 아이패드, 아이폰은 동작하지 않습니다. 그치만 idb는 비트 상관없이 잘 뽑아줍니다.

물론 이 툴도 모든 Scheme을 뽑을 수는 없겠지만, 정적 분석 툴에서 하나라도 더 확인할 수 있다니 나이스하죠.

이외에도 Fuzzing을 통해 추가로 분석하는 기능 또한 제공하니 유용합니다.

Key chain

KeyChain 탭은 앱 자체에 대한 분석이 아닌 해당 iOS 기기에 대한 분석이 이루어집니다. KeyChain을 이용해서 여러가지 인증 요소로 사용할 수 있는데 이를 자동으로 수집하고 내용을 보여줍니다. Apple 계정의 인증정보 이외에도 각각 앱에 저장된 인증정보, Wifi Password 등 민감한 내용에 대해 수집이 가능합니다.

원래 탈옥이나 루팅을 하게되면 당연히 가능한 부분이고, 위험성도 잘 알려져있습니다. 이를 이런툴들을 통해서 조금 더 쉽게 수집할 수 있으니 공격자 입장에서 환영이지만, 루팅이나 탈옥이 일반 사용자들 입장에선 굉장히 위험하단것도 보여줄 수 있을듯합니다.

Conclusion

이외에도 바이너리, 파일시스템, 스토리지 분석 등 여러가지 기능을 제공해줍니다. 이런 툴들을 통해 큰 그림을 보고 다시 각각 부분에 특화된 프로그램들과 센스를 이용해서 취약점을 분석한다면.. 좋은 결과가 있지 않을까 싶네요.