본문 바로가기
정보보안/안드로이드해킹

안드로이드 모의해킹) 런타임 조작

by _miiiiiin_zzang_ 2020. 11. 26.

앱이 실행되는 도중 메모리상에 악의적인 행동을 하는 취약점

 

  1. 취약점 진단 과정
    • 디버깅 포트 찾기
    • 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으로 입력하고 실행하기

 

  • 이름 입력 완료
    • 비밀번호 변경 가능
    • 서버에서 로그 확인하면 정상적으로 변경된 확인 가능
  1. 취약점 대응 방안
    • 디버깅 관련 옵션이 true 되어 있기 떄문에 발생한 취약점
    • 디버깅은 개발 과정에서 오류를 수정하거나 의도한대로 동작하는지 확인하는 주용한 도구지만 배포 수정하지 않는다면 많은 정보를 주는 취약점임
    • 코드 난독화가 적용된다면 쉽게 취약점을 확인할 없을 것임

댓글