보통은 Frida + Burp(ZAProxy)의 조합으로 분석을 하는데, 보다보니 Needle이 Frida 사용에 있어 좀 편리한 부분이 있더군요.
크게 디바이스에 대한 분석(키체인 이런거.) + Frida의 후킹 코드들, Cycript의 코드단 분석 정도를 하나의 명령 행에서 처리할 수 있도록 구성되어 있습니다.
Needle!
Setup - Agent
Needle은 Agent <=> Server 방식의 Application으로 대상 디바이스랑 분석기기(서버)에 모두 세팅이 되어야하니다.시디아 소스 추가 후 needle agent 받아주시면 끝납니다. ( Cydia > Source > Add )
http://mobiletools.mwrinfosecurity.com/cydia/ 추가 후
Search에서 Needle 찾아주시면 Needle agent가 나옵니다. 설치해쥐면 됩니다.
Setup - Server
공식 깃허브에서 코드 클론해주시고..#> git clone https://github.com/mwrlabs/needle
필수 패키지, python library 설치해줍니다. 리눅스의 경우 apt-get , macos는 brew로 해주시고 python 라이브러리는 모두 pip 지원이 되므로 pip 통해서 설치해줍시다.
One line script
git clone https://github.com/mwrlabs/needle cd needle; mkdir 3rd if $1 = 'macos' then sudo apt-get install python2.7 python2.7-dev sshpass sqlite3 lib32ncurses5-dev ; sudo pip install readline paramiko sshtunnel frida mitmproxy biplist else brew install python; brew install libxml2; xcode-select —install; sudo -H pip install --upgrade --user readline; sudo -H pip install --upgrade --user paramiko; sudo -H pip install --upgrade --user sshtunnel; sudo -H pip install --upgrade --user frida; sudo -H pip install --upgrade --user biplist; brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb; wget https://github.com/mitmproxy/mitmproxy/releases/download/v0.17.1/mitmproxy-0.17.1-osx.tar.gz; tar -xvzf mitmproxy-0.17.1-osx.tar.gz; sudo cp mitmproxy-0.17.1-osx/mitm* /usr/local/bin/ fiLinux
#> sudo apt-get install python2.7 python2.7-dev sshpass sqlite3 lib32ncurses5-dev #> sudo pip install readline paramiko sshtunnel frida mitmproxy biplist sshtunnel paramiko
macOS
#> brew install python #> brew install libxml2 #> xcode-select --install #> sudo -H pip install --upgrade --user readline; #> sudo -H pip install --upgrade --user paramiko; #> sudo -H pip install --upgrade --user sshtunnel; #> sudo -H pip install --upgrade --user frida; #> sudo -H pip install --upgrade --user biplist #> brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb #> wget https://github.com/mitmproxy/mitmproxy/releases/download/v0.17.1/mitmproxy-0.17.1-osx.tar.gz #> tar -xvzf mitmproxy-0.17.1-osx.tar.gz #> sudo cp mitmproxy-0.17.1-osx/mitm* /usr/local/bin
설치가 완료되면 needle.py 실행해주시면 대화형 쉘로 바로 넘어가집니다.
root@de98522c1939:/needle/needle# python needle.py __ _ _______ _______ ______ _______ | \ | |______ |______ | \ | |______ | \_| |______ |______ |_____/ |_____ |______ Needle v1.3.2 [mwr.to/needle] [MWR InfoSecurity (@MWRLabs) - Marco Lancini (@LanciniMarco)] [needle] >추가로 이후에 Frida쪽 기능 쓰려면 이런 에러가 발생할 수도 있는데요, 이는 Agent가 설치된 단말에 lipo 명령이 없어서 발생하는 문제입니다.
별도 패키지로 제공되는 명령은 아닌 것 같고, Cydia에서 "Darwin CC Tools" 설치로 해결이 가능합니다.
[!] sh: lipo: command not found 참고: https://github.com/mwrlabs/needle/issues/172
How to use?
보통의 보안/해킹 툴들과 비슷하게 전반적인 구조는 Metasploit과 동일합니다. 명령어도 거의 비슷하니 익숙하신 분이라면 적응에는 크게 문제없을 것 같네요.모든 테스트의 시작인 help를 보면..
[needle][list_apps] > help Commands (type [help|?] <topic>): --------------------------------- add_issue exit issues load reload search shell_local use back help jobs pull resource set show exec_command info kill push run shell unset이런식으로 나타나는데요 대충 정리해보면
[ 기본 명령 ]
show : 옵션이던 뭐던 볼떄..
use : 모듈 사용
(un)set : 인자값 설정(show options으로 본 이후 해당 값들)
back : 모듈 상위로
exit : 종료
[ 자체적인 이슈관리 ]
issues : 이슈 리스트 보기
add_issue : 이슈 등록
[ 나머지 ]
push : 데이터 밀어넣기
shell : 디바이스 쉘 연결
등등... 거의 읽히는 대로의 의미와 Metasploit console의 명령 형태랑 비슷합니다. 특별한건 없어요
(사실 쓰기 귀찮..)
모듈을 선택하지 않은 상태(현재?)에서 show options을 보면 global하게 적용된 설정을 볼 수 있습니다. 여기엔 needle agent의 ip / port 등이 있고 설정 후 다른 기능이나 모듈을 사용하면 해당 정보를 기반으로 기능을 수행하게 됩니다.
[needle] > show options Name Current Value Required Description ------------------------ ------------- -------- ----------- AGENT_PORT 4444 yes Port on which the Needle Agent is listening APP no Bundle ID of the target application (e.g., com.example.app). Leave empty to launch wizard DEBUG False yes Enable debugging output HIDE_SYSTEM_APPS False yes If set to True, only 3rd party apps will be shown IP 192.168.0.6 yes IP address of the testing device (set to localhost to use USB) OUTPUT_FOLDER /root/.needle/output yes Full path of the output folder, where to store the output of the modules PASSWORD ******** yes SSH Password of the testing device PORT 22 yes Port of the SSH agent on the testing device (needs to be != 22 to use USB) PUB_KEY_AUTH True yes Use public key auth to authenticate to the device. Key must be present in the ssh-agent if a passphrase is used SAVE_HISTORY True yes Persists command history across sessions SKIP_OUTPUT_FOLDER_CHECK False no Skip the check that ensures the output folder does not already contain other files. It will automatically overwrite any file USERNAME root yes SSH Username of the testing device VERBOSE True yes Enable verbose output하위 모듈로 가서도 동일하게 필수 인자값등을 확인하려면 show options 으로 보시고 set 명령으로 세팅, run 으로 실행하는 형태로 진행하시면 됩니다.
(몇번 써보면 어떤 방식인지 금방 감 오실거에요)
기본적인 쉘 접근부터 해보면.. 우선 Needle Agent에서 Listen을 활성화 해줍니다. (우측 상단에 포트있어요)
(대다수 기능은 Agent에서 활성화가 되어야 수행 가능하고 간혹 Connection 에러 발생하면 Agent에서 내렸다가 올려주시면 됩니다)
Server에서 IP랑 PORT 세팅하고 shell 명령 넣어주시면..
[needle] > shell [*] Spawning a shell... [*] Checking connection with device... [V] Connection not present, creating a new instance [V] [AGENT] Connecting to agent (192.268.0.6:4444)... [+] [AGENT] Successfully connected to agent (192.268.0.6:4444)... [V] [SSH] Connecting (192.268.0.6:22)... [+] [SSH] Connected (192.268.0.6:22) Warning: Permanently added '192.268.0.6' (RSA) to the list of known hosts. Last login: Mon Dec 3 21:44:15 2018 from 192.268.0.4 vaha:~ root# vaha:~ root#디바이스에 바로 접근이 됩니다. (그냥 ssh로 접근한거)
이제 neelde의 강점인 module로 테스트를 진행해보죠.
Use modules
우선 사용할 모듈을 골라봅시다. show modules로 전체 모듈 리스트를 보거나 search로 필요한 기능을 찾아서 보시면 됩니다.[needle] > show modules _Templates ---------- _templates/template_background _templates/template_base _templates/template_frida _templates/template_frida_script _templates/template_static Binary ------ binary/info/checksums binary/info/compilation_checks binary/info/metadata binary/info/provisioning_profile binary/info/universal_links binary/installation/install binary/installation/pull_ipa binary/reversing/class_dump binary/reversing/class_dump_frida_enum-all-methods binary/reversing/class_dump_frida_enum-classes binary/reversing/class_dump_frida_find-class-enum-methods binary/reversing/shared_libraries binary/reversing/strings Comms ----- comms/certs/delete_ca comms/certs/export_ca comms/certs/import_ca comms/certs/install_ca_burp comms/certs/install_ca_mitm comms/certs/list_ca comms/certs/view_cert comms/proxy/pinning_bypass_frida comms/proxy/proxy_regular Device ------ device/agent_client device/clean_storage device/dependency_installer device/hosts device/list_apps Dynamic ------- dynamic/detection/jailbreak_detection dynamic/detection/script_jailbreak-detection-bypass dynamic/ipc/open_uri dynamic/memory/heap_dump dynamic/monitor/files dynamic/monitor/pasteboard dynamic/monitor/syslog dynamic/watch/syslog Hooking ------- hooking/cycript/cycript_shell hooking/cycript/cycript_touchid hooking/frida/frida_launcher hooking/frida/frida_shell hooking/frida/frida_trace hooking/frida/script_anti-hooking-check hooking/frida/script_dump-ui hooking/frida/script_hook-all-methods-of-class hooking/frida/script_hook-method-of-class hooking/frida/script_touch-id-bypass hooking/theos/list_tweaks hooking/theos/theos_tweak Mdm --- mdm/effective_user_settings Static ------ static/code_checks Storage ------- storage/backup/icloud_content_frida storage/caching/keyboard_autocomplete storage/caching/screenshot storage/data/container storage/data/files_binarycookies storage/data/files_cachedb storage/data/files_plist storage/data/files_sql storage/data/keychain_dump storage/data/keychain_dump_frida대상 디바이스에 있는 앱 리스트를 뽑아보죠.
[needle][class_dump_frida_enum-classes] > use device/list_apps [+] Resource file successfully loaded [needle][list_apps] > show options Name Current Value Required Description ---------------- ------------- -------- ----------- HIDE_SYSTEM_APPS False yes If set to True, only 3rd party apps will be shown [needle][list_apps] > run [*] Checking connection with device... [+] Already connected to: 192.268.0.6 [*] Looking for apps... [+] Apps found: 0 - com.apple.CTCarrierSpaceAuth 1 - com.apple.MobileAddressBook 2 - com.apple.CheckerBoard 3 - com.appsolutegames.kubic 4 - com.apple.carkit.DNDBuddy 5 - com.apple.WebContentFilter.remoteUI.WebContentAnalysisUImsfconsole 쓰는거랑 거의 비슷하기 떄문에 다른 기능들도 비슷하게 사용하시면 됩니다. needle에서 구현해놓은 frida나 cycript 스크립트로 어느정도 풀리는 앱들이 있겠지만, 아닌 경우도 많을겁니다.
떄에 따라 직접 코드를 넣어서 사용해야할 때가 많은데, 이 때 template 쪽 코드 수정해서 사용하시면 될 것 같습니다.
_Templates ---------- _templates/template_background _templates/template_base _templates/template_frida _templates/template_frida_script _templates/template_static
각 종류별로 스크립트 템플릿이 있고, 이를 기반으로 스크립트를 추가할 수 있습니다.
다른 사용법은 wiki 참조(https://github.com/mwrlabs/needle/wiki) 해주시며 좋을듯 합니다.
HAHWULSecurity engineer, Gopher and H4cker! |
0 개의 댓글:
Post a Comment