앱이 실행되는 도중 메모리상에 악의적인 행동을 하는 취약점
- 취약점 진단 과정
- 디버깅 포트 찾기
- adb jdwp
- insecurebank 실행 전
- insecurebank 실행 후
- 인시큐어뱅크 어플 실행 후 디버깅 포트 2508이 새로 생긴 걸 확인할 수 있다. 이때 새로 생긴 포트가 인시큐어뱅크 디버깅 포트임
- 이 포트는 매번 변경되기 때문에 그때그때 확인 필요
- adb를 통해 디버깅 포트를 로컬 포트로 포트포워딩해준 후 jdb 명령어를 통해 로컬 디버깅 포트로 연결해줘야함
- 근데 한번에 될리가 없지 없다 나왔으니 확인 필요
- 멍청인가 명령어 제대로 안씀
- 컴포넌트 취약점과 런타임 조작을 통해 로그인하지 않은 상태에서 계정의 패스워드를 변경하기 실습 진행~~
- 로그인 하지 않고 패스워드 변경 위해서는 ChangePassword 액티비티를 컴포넌트 취약점을 사용하여 강제로 실행시켜야 함
- 정상 페이지
- 컴포넌트 취약점을 사용하여 강제로 실행시키는 명령어
- 비정상적으로 실행한 페이지
- 임의로 유저네임에 입력이 불가하며 액티비티 분석 필요
- 클래스가 시작할 때는 onCreate 함수를 통해 실행되기 때문에 정확한 위치를 알기 위해 디컴파일 하여 smali 코드를 분석해야함
- 이런 문구가 뜨면서 안되면 -f 옵션을 추가해보자
- 클래스를 시작하는 onCreate 함부는 주로 클래스 이름만 있는 파일에 있음
- jdb의 stop in 명령어를 통해 onCreate 함수에 브레이크 포인터 설정하기
- 여기까지 했으면 인시큐어뱅크 앱에서 로그아웃 하고 다시 비정상적으로 ChangePassword 액티비티 실행
- 위에 썼지만 다시 올리기
- line 75라는 부분을 확인 가능
- 메모장에서 확인 가능
- 이를 통해 디버깅 하는 동안 smali코드의 어떤 부분이 실행되고 있는지 알 수 있음
- 파일을 자세히 보면 uname이 있음
- 이는 사용자 이름과 관계있는 변수라고 파악 가능함
- jdb에서 85까지 이동하기
- next 입력하여 이동
- 책에선 86라인에서 브레이크포인트가 걸렸다는데 이해가 안된다 내 눈엔 다 똑같은 명령어로 보이는데 뭐지. 물어볼 사람도 없으니 그냥 대충 그런가보다 하고 넘기겠다…
- 암튼 여기서 변수를 확인해야한다.
- 이름을 jack으로 입력하고 실행하기
- 이름 입력 완료
- 비밀번호 변경 가능
- 서버에서 로그 확인하면 정상적으로 변경된 것 확인 가능
- 취약점 대응 방안
- 디버깅 관련 옵션이 true로 되어 있기 떄문에 발생한 취약점
- 디버깅은 앱 개발 과정에서 오류를 수정하거나 의도한대로 동작하는지 확인하는 주용한 도구지만 배포 전 수정하지 않는다면 많은 정보를 주는 취약점임
- 코드 난독화가 적용된다면 쉽게 취약점을 확인할 수 없을 것임
'정보보안 > 안드로이드해킹' 카테고리의 다른 글
안드로이드 모의해킹) 안전하지 않은 HTTP 통신 (0) | 2020.11.30 |
---|---|
안드로이드 모의해킹) 안전하지 않은 SD카드 저장소 (0) | 2020.11.26 |
안드로이드 모의해킹) 안드로이드 백업 취약점 (0) | 2020.09.10 |
안드로이드 모의해킹) 안드로이드 복사/붙여넣기 취약점 (0) | 2020.09.10 |
안드로이드 모의해킹) 애플리케이션 디버깅 기능 (0) | 2020.09.09 |
댓글