2019. 11. 27.
참고)와이어샤크 유용한 명령어
tcp.port == 80
http // http 프로토콜 만 출력
ip.addr == 192.168.0.1 // 특정 ip와의 통신만 출력
ARP 스푸핑
상대방 IP 주소로 접속하는 명령을 내리면 호스트는 네트워크 전체에 ARP 요청을 보내어 누가 그 IP를 가지고 있는지 물어보게 된다. 이때 요청하는 IP가 맞는 호스트가 응답해야하는데 해커가 ARP 요청을 중간에서 가로채어 응답을 하는 것이다. 그러면 해커쪽으로 접속하게 만들 수 있다.
이는 칼리리눅스에 arpspoof 프로그램으로 공격을 시연 할 수 있다.
ip forward 란 값을 1로 변경해야 한다.
echo 1 > /proc/sys/net/ipv4/ip_forward
(지속적으로 설정되게 하려면 /edit/sysctl.conf 에서 ipv4.ip_forward =1 로 설정해야 한다. )
이 설정은 자기한테 오는 설정이 아닌 경우에 라우터처럼 트래픽을 전달해주는 설정이다.
라우터가 요청을 받으면 ip 포워딩 하듯이 요청을 받으면 트래픽을 다른쪽으로 전달하기 위함이다. 즉 통신의 중간에 끼어들어서 중간에 거쳐가게 만들어도 다른 호스트들끼리 통신이 가능한 것이다.
arpspoof -i eth1 -t 192.168.56.107(칼리) 192.168.70.108(윈도우)
arpspoof -i eth1 -t 192.168.56.108(윈도우) 192.168.70.107 (칼리)
이렇게 되면 칼리 메타스플로잇과 윈도우 서로가 통신하는 사람이 나(칼리 리눅스) 라고 생각하기 때문에 통신이 칼리 리눅스로 들어옥 된다.
132번은 메타스플로잇의 데이터인데 131 인 칼리리눅스와 물리주소가 동일하게 설정되어 있는 것을 알 수 있다. 따라서 윈도우에서 메타 쪽으로 요청을 하게되면 그 트래픽이 칼리 리눅스로 거쳐간다.
윈도우에서 메타스플로잇터블로 접속해보면 다음과 같이 칼리에서 트래픽을 확인 할 수 있다.
메타스플로이터블/phpMyAdmin 으로 접속해서 아이디 패스워드를 입력하면 다음과 같이 post 데이터 역시 캡처 할 수 있다.
윈도우에서 메타로 접속하는 ftp 역시 다음과 같이 칼리 리눅스에서 스니핑 할 수 있다.
HTTP Parameter Pollution 취약점을 줄여서 HPP 라고 부른다.
HTTP 파라미터 오염 취약점은 서버단과 클라이언트 단 에서 설명이 가능하다.
[서버단]
https://backend.example/doTransfer.php
파라미터 : toAccount=9844&amount=1000&fromAccount=12345
이를 toAccount=9844&amount=1000&fromAccount=12345&toAccount=99999
[클라이언트 단]
<? $val=htmlspecialchars($_GET['par'],ENT_QUOTES); ?>
<a href="/page.php?action=view&par='.<?=$val?>.'">View Me!</a>
이러한 php 소스가 있다고 하자
http://host/page.php?par=123%26action=edit 이라고 par의 인자값을 전달하면
<a href="/page.php?action=view&par=123&action=edit">View Me!</a>
위와 같이 action 값이 view 가 아니라 edit 으로 변경되는 경우도 있다
위 자료(https://www.owasp.org/index.php/Testing_for_HTTP_Parameter_pollution_(OTG-INPVAL-004))를 보면 어느 파라미터가 유효한지 확인 할 수 있다. 즉, 같은 이름으로 중복 파라미터가 제공되도록 해서는 안된다. 아래 사례를 보면 꽤 위험한 취약점 임을 알 수 있다.
(사례)
Twitter Unsubscribe Notifications
트위터에서 온 이메일을 unsubscribe 하기 위해 버튼을 눌를 때, 다음과 같은 url이 사용된다.
HPP 취약점을 이용하여 기존 UID 파라미터 앞에 새로운 파라미터값을 삽입한 후 전달하면 성공이 된다. 즉 다른 사람의 계정의 메일링이 해지가 되는 것이다.
비슷한 사례로, twitter 에서는 사용자를 팔러우하거나 좋아요를 하거나 리트윗을 하거나 트윗을 하거나 할 수 있는데 이러한 4개 행위에 대해서 HPP 취약점이 있었다.
예를 들면, 팔로우 하기 위한 URL이 다음과 같이 변경될 수 있다.
또 다른 시나리오는 다음과 같다
정상적인 흐름
# 참고
HTTP 파라미터 오염 취약점은 서버단과 클라이언트 단 에서 설명이 가능하다.
[서버단]
https://backend.example/doTransfer.php
파라미터 : toAccount=9844&amount=1000&fromAccount=12345
이를 toAccount=9844&amount=1000&fromAccount=12345&toAccount=99999
[클라이언트 단]
<? $val=htmlspecialchars($_GET['par'],ENT_QUOTES); ?>
<a href="/page.php?action=view&par='.<?=$val?>.'">View Me!</a>
이러한 php 소스가 있다고 하자
http://host/page.php?par=123%26action=edit 이라고 par의 인자값을 전달하면
<a href="/page.php?action=view&par=123&action=edit">View Me!</a>
위와 같이 action 값이 view 가 아니라 edit 으로 변경되는 경우도 있다
위 자료(https://www.owasp.org/index.php/Testing_for_HTTP_Parameter_pollution_(OTG-INPVAL-004))를 보면 어느 파라미터가 유효한지 확인 할 수 있다. 즉, 같은 이름으로 중복 파라미터가 제공되도록 해서는 안된다. 아래 사례를 보면 꽤 위험한 취약점 임을 알 수 있다.
(사례)
Twitter Unsubscribe Notifications
트위터에서 온 이메일을 unsubscribe 하기 위해 버튼을 눌를 때, 다음과 같은 url이 사용된다.
- https://twitter.com/i/u?t=1&cn=bWV&sig=657&iid=F6542&uid=1134885524&nid=22+26
해커는 UID 를 변경해보았지만, 에러페이지가 리턴된다.
HPP 취약점을 이용하여 기존 UID 파라미터 앞에 새로운 파라미터값을 삽입한 후 전달하면 성공이 된다. 즉 다른 사람의 계정의 메일링이 해지가 되는 것이다.
- https://twitter.com/i/u?iid=F6542&uid=2321301342&uid=1134885524&nid=22+26
비슷한 사례로, twitter 에서는 사용자를 팔러우하거나 좋아요를 하거나 리트윗을 하거나 트윗을 하거나 할 수 있는데 이러한 4개 행위에 대해서 HPP 취약점이 있었다.
예를 들면, 팔로우 하기 위한 URL이 다음과 같이 변경될 수 있다.
- https://twitter.com/intent/follow?screen_name=twitter&screen_name=test1234
또 다른 시나리오는 다음과 같다
정상적인 흐름
- read.jsp?num=7 -> board.jsp?cmd=read&num=7
공격 흐름
- read.jsp?num=7%26cmd=delete
- board.jsp?cmd=read&num=7&cmd=delete
# 참고
- web-hacking-101
- https://www.owasp.org/index.php/Testing_for_HTTP_Parameter_pollution_(OTG-INPVAL-004)
- https://ericrafaloff.com/parameter-tampering-attack-on-twitter-web-intents/
Android APK 진단을 위한 툴 소개
네트워크 통신을 하는 앱이라면, 웹 진단 툴을 함께 사용한다.
1) Apktool
링크 : http://ibotpeaches.github.io/Apktool/
ApkTool은 apk파일은 디컴파일하거나 수정한 후 다시 컴파일 할 수 있는 Tool .
여러 옵션이 있지만 자주 사용하는 옵션은
d 옵션 : decompile 해주는 옵션으로 smali 파일이 아웃풋
b 옵션 : recompile 해주는 옵션으로 apkfile이 아웃풋으로 나오며, signing을 거쳐 안드로이드폰에 설치가 가능.
d -d 옵션 : decompile 해주는 옵션으로 smali 파일이 아웃풋으로 나오지만, 확장자를 java파일로 만들어주어 동적디버깅 할 때 사용.
2) apk-sign
링크 : https://github.com/appium/sign
안드로이드에는 signing되지 않은 앱은 설치되지 않음
이 signing은 개발자가 APK파일로 만들어 낼 때 하는데, Apk Tool 을 이용해 decompile을 하면 signing이 풀림.
따라서 폰에 설치를 하기 위해서는 signing을 해주어야 하는데, 원 개발자의 서명을 따라할수는 없으나 아무 keystore를 가지고 signing만 해주어도 설치는 가능.
3) dex2jar
링크 : https://sourceforge.net/projects/dex2jar/
Apk파일은 안에 classes.dex라는 파일이 있는데 이 파일은 Android Dalvik이 인식할수 있도록 class파일을 바이트 코드로 변환한 파일.
이 파일을 dex2jar를 이용해 class파일을 추출하는 Tool.
4) jd-gui
링크 : http://jd.benow.ca/
JAVA decompiler
위 dex2jar를 이용해 추출해낸 class파일을 java로 복원해주는 Tool.
그런데 복원할때 완벽하지 않아 복원이 잘 되지 않는 부분이 있는 것이 아쉬운점.
5) jadx
링크 : https://github.com/skylot/jadx
JAVA decompiler
필자는 dex2jar&jd-gui 보다 jadx를 사용하는 것을 더 선호하는데 jadx의 결과가 jd-gui보다 좀더 정확하게 복원을 해주는 것으로 느껴지고, 또 dex2jar라는 단계를 밟지 않고 바로 apk파일을 끌어다 놓는 것만으로 디 컴파일이 되기 때문.
6) cheatengine
링크 : http://www.cheatengine.org/
메모리 변조 툴
android 앱에 attach해서 메모리를 변조등을 수행할 수 있다.
7) frida
링크 : http://www.frida.re/docs/android/
frida는 javascript inject를 이용해 개발자가 만들어낸 함수를 공격자가 명시해서 호출하거나, 함수를 새로 만들어서 호출 할 수도 있다.
예를 들면 Getpassword(String id) 이런 함수가 있다면 공격자가 이를 호출하여 password를 얻어낼 수 도 있다.
8) ida pro
링크 : https://www.hex-rays.com/products/ida/
ida는 동적 디버깅 툴로 대상 Apk를 실행시키면서, 각 부분에 BP를 걸어 그 시점에서의 레지스트리 값등을 확인하고, 패치를 통해
체크로직등의 우회를 노릴수 있다.
9) drozer
링크 : https://labs.mwrinfosecurity.com/tools/drozer/
안드로이드 진단 프레임워크로 안드로이드 어플리케이션의 보안 취약점을 진단할 수 있다.
10) introspy
링크 : https://github.com/iSECPartners/Introspy-Android
함수 호출을 포함한 어플리케이션 API 안드로이드 API 파라미터와 리턴값을 로깅 해주는 tool이다.
출처: https://yprefer.tistory.com/1?category=648958 [YPrefer's Develop&Security]
네트워크 통신을 하는 앱이라면, 웹 진단 툴을 함께 사용한다.
1) Apktool
링크 : http://ibotpeaches.github.io/Apktool/
ApkTool은 apk파일은 디컴파일하거나 수정한 후 다시 컴파일 할 수 있는 Tool .
여러 옵션이 있지만 자주 사용하는 옵션은
d 옵션 : decompile 해주는 옵션으로 smali 파일이 아웃풋
b 옵션 : recompile 해주는 옵션으로 apkfile이 아웃풋으로 나오며, signing을 거쳐 안드로이드폰에 설치가 가능.
d -d 옵션 : decompile 해주는 옵션으로 smali 파일이 아웃풋으로 나오지만, 확장자를 java파일로 만들어주어 동적디버깅 할 때 사용.
2) apk-sign
링크 : https://github.com/appium/sign
안드로이드에는 signing되지 않은 앱은 설치되지 않음
이 signing은 개발자가 APK파일로 만들어 낼 때 하는데, Apk Tool 을 이용해 decompile을 하면 signing이 풀림.
따라서 폰에 설치를 하기 위해서는 signing을 해주어야 하는데, 원 개발자의 서명을 따라할수는 없으나 아무 keystore를 가지고 signing만 해주어도 설치는 가능.
3) dex2jar
링크 : https://sourceforge.net/projects/dex2jar/
Apk파일은 안에 classes.dex라는 파일이 있는데 이 파일은 Android Dalvik이 인식할수 있도록 class파일을 바이트 코드로 변환한 파일.
이 파일을 dex2jar를 이용해 class파일을 추출하는 Tool.
4) jd-gui
링크 : http://jd.benow.ca/
JAVA decompiler
위 dex2jar를 이용해 추출해낸 class파일을 java로 복원해주는 Tool.
그런데 복원할때 완벽하지 않아 복원이 잘 되지 않는 부분이 있는 것이 아쉬운점.
5) jadx
링크 : https://github.com/skylot/jadx
JAVA decompiler
필자는 dex2jar&jd-gui 보다 jadx를 사용하는 것을 더 선호하는데 jadx의 결과가 jd-gui보다 좀더 정확하게 복원을 해주는 것으로 느껴지고, 또 dex2jar라는 단계를 밟지 않고 바로 apk파일을 끌어다 놓는 것만으로 디 컴파일이 되기 때문.
6) cheatengine
링크 : http://www.cheatengine.org/
메모리 변조 툴
android 앱에 attach해서 메모리를 변조등을 수행할 수 있다.
7) frida
링크 : http://www.frida.re/docs/android/
frida는 javascript inject를 이용해 개발자가 만들어낸 함수를 공격자가 명시해서 호출하거나, 함수를 새로 만들어서 호출 할 수도 있다.
예를 들면 Getpassword(String id) 이런 함수가 있다면 공격자가 이를 호출하여 password를 얻어낼 수 도 있다.
8) ida pro
링크 : https://www.hex-rays.com/products/ida/
ida는 동적 디버깅 툴로 대상 Apk를 실행시키면서, 각 부분에 BP를 걸어 그 시점에서의 레지스트리 값등을 확인하고, 패치를 통해
체크로직등의 우회를 노릴수 있다.
9) drozer
링크 : https://labs.mwrinfosecurity.com/tools/drozer/
안드로이드 진단 프레임워크로 안드로이드 어플리케이션의 보안 취약점을 진단할 수 있다.
10) introspy
링크 : https://github.com/iSECPartners/Introspy-Android
함수 호출을 포함한 어플리케이션 API 안드로이드 API 파라미터와 리턴값을 로깅 해주는 tool이다.
출처: https://yprefer.tistory.com/1?category=648958 [YPrefer's Develop&Security]
ADB (Android Debug Bridge) 는 안드로이드 에뮬레이터나 PC에 실제 연결된 장치를 제어하기 위한 안드로이드 디버깅 도구 중 하나이다. 안드로이드 스튜디오와 같은 안드로이드 통합 개발 환경에서는 기능을 GUI 형태로 제공하는 반면, ADB 는 명령라인을 통해 사용자가 명령어를 입력함으로써 안드로이드 기기와 통신하고 있다.
ADB는 안드로이드 SDK 에 포함되어 있으며, SDK 설치 폴더의 하위 폴더인 platform-tools 에 포함되어 있다.
adb devices 명령을 실행한 결과 1개의 device가 발견되었다.
adb shell 명령으로 쉘에 접근 할 수도 있다. (만약 여러개의 장치가 연결되었으면 usb의 경우는 -d 옵션을 붙이고 에뮬의 경우는 -e를 붙여야 한다. )
[로그캣을 이용한 로그 분석]
로그캣은 안드로이드 장치에서 발생하는 로그 메시지를 화면으로 출력하거나 파일 형태로 저장하는 기능을 제공한다.
adb shell 로 로그인 후 logcat 명령어를 입력함으로써 안드로이드 로그메시지를 볼 수 있다. 로그가 모두 출력된 이후에 로그캣을 종료하지 않으면 실시간 발생하는 이벤트 로그가 출력된다.
ADB는 안드로이드 SDK 에 포함되어 있으며, SDK 설치 폴더의 하위 폴더인 platform-tools 에 포함되어 있다.
adb devices 명령을 실행한 결과 1개의 device가 발견되었다.
adb shell 명령으로 쉘에 접근 할 수도 있다. (만약 여러개의 장치가 연결되었으면 usb의 경우는 -d 옵션을 붙이고 에뮬의 경우는 -e를 붙여야 한다. )
[로그캣을 이용한 로그 분석]
로그캣은 안드로이드 장치에서 발생하는 로그 메시지를 화면으로 출력하거나 파일 형태로 저장하는 기능을 제공한다.
adb shell 로 로그인 후 logcat 명령어를 입력함으로써 안드로이드 로그메시지를 볼 수 있다. 로그가 모두 출력된 이후에 로그캣을 종료하지 않으면 실시간 발생하는 이벤트 로그가 출력된다.
iOS 앱의 바이너리 파일을 변조하여 무결성 검증 로직이 존재하는지 확인하는 점검
[1단계]
- 모바일 앱의 바이너리 파일(payload/app_name)은 애플 사의 암호화 방식으로 암호화 되어 있으므로 복호화를 해야 함
- 설치된 디렉토리로 이동하면 암호화 되어 있지만, 앱 구동 시 복호화 하게 되어 있음
- 설치된 앱(구성) 디렉토리 : /private/var/containers/Bundle/Application/
- Clutch2를 이용해 바이너리 파일을 복호화를 하면 Clutch2가 설치된 디렉토리에 복호화 된 파일이 저장됨
- Clutch2 -i : 복호화를 할 앱의 목록 출력
- Clutch2 -b 숫자 : 지정된 앱(숫자)를 복호화
** ios 버전에 따라서 clutch 를 통한 복호화가 안되는 경우가 있다. 이럴 경우, 수동으로 복호화 해야함. 이와 관련한 글을 추후 작성 할 예정이다.
[2단계]
- 아이펀박스 프로그램으로 복호화 된 파일을 로컬 PC에 저장
- 헥사 에디터로 복호화 된 바이너리 파일을 열어 변조
[3단계]
- 아이펀박스 프로그램으로 app_name.ipa 파일을 모바일 단말기에 설치
- 변조된 앱이 이상없이 실행되면 무결성 취약점이 존재하는 것
- 변조한 앱으로 무엇을 할것인지는 다음 문제
[1단계]
- 모바일 앱의 바이너리 파일(payload/app_name)은 애플 사의 암호화 방식으로 암호화 되어 있으므로 복호화를 해야 함
- 설치된 디렉토리로 이동하면 암호화 되어 있지만, 앱 구동 시 복호화 하게 되어 있음
- 설치된 앱(구성) 디렉토리 : /private/var/containers/Bundle/Application/
- Clutch2를 이용해 바이너리 파일을 복호화를 하면 Clutch2가 설치된 디렉토리에 복호화 된 파일이 저장됨
- Clutch2 -i : 복호화를 할 앱의 목록 출력
- Clutch2 -b 숫자 : 지정된 앱(숫자)를 복호화
** ios 버전에 따라서 clutch 를 통한 복호화가 안되는 경우가 있다. 이럴 경우, 수동으로 복호화 해야함. 이와 관련한 글을 추후 작성 할 예정이다.
[2단계]
- 아이펀박스 프로그램으로 복호화 된 파일을 로컬 PC에 저장
- 헥사 에디터로 복호화 된 바이너리 파일을 열어 변조
[3단계]
- 아이펀박스 프로그램으로 app_name.ipa 파일을 모바일 단말기에 설치
- 변조된 앱이 이상없이 실행되면 무결성 취약점이 존재하는 것
- 변조한 앱으로 무엇을 할것인지는 다음 문제
1. 탈옥
2. 점검 할 앱 설치 (DVIA) - http://damnvulnerableiosapp.com/(https://github.com/prateek147/DVIA-v2/releases)
3. 점검 시작
- 우선 iOS 폰이 탈옥이 되어있어야 한다. (루팅이라고도 함)
- 탈옥의 방법은 굉장히 다양하고 애플 정책에 따라 계속 바뀌므로 따로 기재하지는 않는다
2. 점검 할 앱 설치 (DVIA) - http://damnvulnerableiosapp.com/(https://github.com/prateek147/DVIA-v2/releases)
- 이는 무료로 제공하는 iOS 점검용 앱인데, swift와 object-c 버전이 각각 다운받을 수 있다.
- 그리고 루팅 폰에서 아래를 설치한다.
- cydia 소스를 추가(https://cydia.akemi.ai/)
- AppInst 설치
- AppSync 설치
- Apple File Conduit2 설치 (폰 리부팅)
- Filezila 를 통해 다운받은 ipa 파일을 폰에 넣고 'appinst ipa파일명' 으로 권한을 부여한다
3. 점검 시작
- 준비는 끝났으니 이제 점검을 수행하면 된다.
- 테스트로 jailbreak Detection 을 우회해 본다.
피드 구독하기:
글
(
Atom
)
Popular Posts
-
/* PHP Version URL CMD WebShell */ /* 사용법 : hxxp://URL/cmd.php?cmd=명령어 */ <? echo " <FORM ACTIO...
-
1. XSS 취약점 이란 대부분의 웹 해킹 기법은 웹 서버 설정 혹은 프로그램의 취약점을 공격하지만, XSS는 사용자를 공격하는 기법이다. 예를 들어 악성 코드가 포함된 글을 읽는 순간 악성 프로그램이 설치되거나 쿠키 혹은 세션 정보가 공격자에게 ...
Recent Posts
Powered by Blogger.