안녕하세요! 오늘은 안전하지 않은 HTTP 통신 , 파라미터 조작 취약점 2개를 실습을 통해 알아보겠습니다.
[안전하지 않은 HTTP 통신이란?]
> 안드로이드 에서도 앱과 서버간의 데이터 통신을 할 때 HTTP통신을 사용합니다. 하지만 HTTP는 보안을 고려하지 않기 때문에 공격자의 스니핑/스푸핑 공격을 이용하여 계정 아이디/비밀번호, 개인 정보를 탈취할 수 있습니다. 중요 정보는 SLL/TLS 통신이 적용된 HTTPS로 안전하게 전송하여야 합니다.
[파라미터 조작 취약점이란?]
> 안드로이드 앱에서 요청하는 값을 중간에서 가로챈 후 매개변수값을 변조하여 전송합니다. 웹해킹에서도 주로 다루는 내용으로 사용자의 개인 정보 수정, 다른 사용자의 게시물 삭제 및 수정 등이 해당합니다. 예를들어 제가 제 게시물을 삭제한다는 버튼을 누르면 전달되는 파라미터가 작성자:Mooner&게시물 번호:23 라고 했을때 이 값이 나가기 전에 작성자:doldol&게시물 번호:42 라고 바꿔버리면 타인의 게시물을 삭제할 수 있는 방식입니다.
1. 환경셋팅
> 이번 실습을 위해선 대표 프록시 툴인 BurpSuite로 NOX기기에서 보내는 패킷을 잡아낼 수 있어야 하는 환경셋팅이 필요합니다. 아래 내용대로 차근차근 따라오시면 됩니다!
1. 우선 BurpSuite 로 들어오셔서 Proxy setting 을 눌러주세요.
2.Proxy 셋팅에서 본인의 내부아이피 주소로 셋팅해주시고 ok 해주세요.
3. 설정한 내용이 들어간 것을 확인한 후 NOX 기기로 이동합니다.
4. NOX 기기에서 WI-FI로 들어오셔서 네트워크 수정 버튼을 눌러주세요.
5. 설정에서 프록시는 '수동' 으로 해주시고 프록시 호스트 이름 = BurpSuite에서 설정한 내부아이피 , 프록시 포트 : 8080 으로 설정해주시고 나갑니다.
6. 이제 Nox에서 인터넷을 키신후 주소창에 http://burp 라고 입력하시면 인증서를 다운로드 할 수 있는 창이 뜹니다. 표시한 CA Certificate 를 누르시면 Download 폴더로 인증서가 다운로드 됩니다.
7. 이후 Download 폴더로 오셔서 cacert.der 파일을 cacert.cer 파일로 이름을 변경해주세요.
Download 폴더 | 파일명 cacert.cer로 변경 |
![]() |
![]() |
8. 기기에서 설정 > 보안 > SD 카드에서 설치 를 클릭하여서 방금 다운로드 받은 인증서 등록을 진행해주세요.
보안 > SD 카드에서 설치 클릭 | cacert.cer 파일 클릭 |
![]() |
![]() |
9. 인증서 이름 지정창이 뜰텐데 저는 그냥 burpca 라는 이름으로 지정해주었습니다.
10. 마지막으로 NOX_ADB를 이용하여 저희가 등록한 사용자 자격증을 시스템 자격증명서로 바꿔줘야 합니다. 해당 명령어를 순차적으로 입력하면 인증서 등록이 완료됩니다.
> nox_adb shell
> cd /data/misc/user/0/cacerts-added
> mount -o rw, remount /system
> mv 9a5ba575.0 /system/etc/security/cacerts
11. 이제 NOX 기기에서 인터넷을 접속합니다.
12. 녹스기기에서 네이버로 접속하자 BurpSuite로 요청패킷,응답패킷을 확인 가능한 모습입니다.
NOX에서 NAVER접속 | BurpSuite에서 패킷 확인 가능 |
![]() |
![]() |
2. 취약점 진단
2.1 안전하지 않은 HTTP 통신
1. 우선 위에 환경셋팅을 마친후 인시큐어 뱅크 어플에서 로그인을 합니다.
2. 방금 보낸 로그인 패킷을 잡아서 보면 로그인 정보가 평문 그대로 전송되는 것을 볼 수 있습니다. 물론 비밀번호가 암호화가 안되고 평문으로 전송되고 있는것 자체도 문제가 되는데 더 문제는 위에 NAVER로 보낸 요청패킷은 https:// 주소로 보내지만 이 요청은 http:// 프로토콜로 보내고 있습니다. 이렇게 되면 중간에 패킷을 가로채는 스니핑 공격에 당할 시 로그인 정보가 그대로 노출 될 수 있다는 문제점이 있습니다.
2.2 파라미터 조작 취약점
1. 인시큐어 뱅크 앱에서 비밀번호 변경 액티비티로 들어가 변경패킷을 요청합니다. 일단 Dinesh@123$ 로 설정한 후 요청을 하였습니다.
2. 보내기 전에 Intercept on 을 해준후 패킷을 중간에 막아보도록 하겠습니다.
3. 사진과 같이 패킷이 중간에 잡혔습니다. 이제 newpassword 인자값을 Admin@159$ 로 바꿔준 후 보내겠습니다.
4. Admin@159$로 인자값을 바꾼후 Forward 를 눌러 보내줍니다.
5. 응답 패킷에 성공적으로 비밀번호가 변경되었다고 뜹니다.
6. 바뀐 비밀번호로 로그인을 시도하자 성공적으로 로그인이 되는것을 확인할 수 있습니다!!
바꾼 비밀번호로 로그인 시도 | 로그인 성공! |
![]() |
![]() |
3. 대응방법
3.1 안전하지 않은 HTTP 통신
1. SSL/TLS 암호화 적용
> SSL/TLS 암호화를 적용하여 HTTPS 통신을 해야 중간에 스니핑이 되더라도 패킷이 난독화가 되어있어 공격자가 무슨내용인지 알 수 없습니다. 암호 알고리즘은 DES 같은 취약한 알고리즘 말고 AES 같은 안정성이 검증된 알고리즘을 선택해야 합니다!
2. 전송되는 정보 암호화
> HTTP 통신으로 보내는 패킷들이 암호화가 되어있지 않을경우 요청하는 정보들이 그대로 노출됩니다. 여기서 개인정보같은 민감한 정보가 있다면 그대로 노출되는 것이기 때문에 반드시 전송과정에서 Hash 암호화같은 과정을 한번은 거쳐서 패킷이 노출되도 안에 내용은 알아내기 힘들게 만들어야 합니다.
3.2 파라미터 조작 취약점
1. 입력값 검증
> 악성 스크립트나 비정상적인 파라미터값을 방지하기 위해 서버측에서 입력값에 대한 검증이 필요합니다. 상태정보 , 민감한 데이터 , 세션 정보같은 중요한 정보는 반드시 서버에서 검증하는 방식이 존재해야 합니다.
2. 개인정보를 이용한 2차인증
> 위에서 예시를 들었던 비밀번호 변경같은경우 이전 비밀번호를 추가로 요구하여 인증과정을 서버에서 거친다면 파라미터 값을 조작하더라도
사실 파라미터 조작같은 경우는 막는방법이 없습니다.. 따라서 서버에서의 검증과정 강화를 통해서 막는 방법이 가장 추천드립니다.
긴 글 읽어주셔서 감사합니다!
'모바일 앱해킹(Android) > Insecure Bank' 카테고리의 다른 글
[Insecure Bank] 설치방법&환경셋팅 부터 취약점 진단까지 모아보기! (Part 1) (0) | 2024.12.18 |
---|---|
[Insecure Bank] 하드코딩 취약점 & 개발자 백도어 (0) | 2024.12.15 |
[Insecure Bank] 안전하지 않은 SD 카드 저장소 (0) | 2024.12.13 |
[Insecure Bank] 안드로이드 백업 취약점 (0) | 2024.12.12 |
[Insecure Bank] 디버깅 취약점 & 런타임 조작 취약점 (0) | 2024.12.11 |