본문 바로가기

모바일 해킹/안드로이드

모바일 앱 해킹 - 1(하드 코딩)

안녕하세요! 제가 이태까지 웹 모의해킹을 공부했습니다. 이번에는 모바일 앱 모의해킹을 공부해 보도록 하겠습니다.

 

저는 인스큐어 뱅크를 이용해서 공부를 하겠습니다.

 

인스큐어 뱅크 설치방법은 인터넷 통해 뒤지시면 나옵니다! 근데.. 저는 생각보다 설치가 안 돼서 많이 애먹긴 했는데

결국 해결 했긴 했습니다. (되도록이면 아나콘다 이용해 가상환경에서 파이썬2을 실행하거나 혹은 윈도우에 있는 파이썬3 지우시고 파이썬2 설치하세요! 만약 파이썬3에서 돌아가는 인스큐어뱅크 받고 싶으시면 공유해드리겠습니다.)

 

환경은 window10이랑 Nox 플레이어입니다.

 

.

.

.

.

.

.

-하드코드?

프로그램 소스 코드에서 데이터를 직접 입력해서 저장한 경우라고 합니다!

 

예를 들어 주석 처리에 중요한 정보 적는 것도 하드 코드이고요. 혹은 서버 관련 정보를 코드에 그대로 적는 경우

하드 코딩을 했다라고 합니다.

 

예시로 가져왔습니다! 키가 그대로 적혀져 있는 걸 볼 수 있죠

안드로이드 앱은 디컴파일이 가능합니다. 이 말은 앱 안에 소스 코드를 볼 수 있다는 이야기입니다.

그래서 앱 같은 경우 소스 코드에 중요한 정보를 적으면 쉽게 찾아볼 수 있습니다.

 

 

---------------------

 

 

저희는 apk 파일을 받으면 디컴파일을 해서 JAVA 파일로 볼 수 있습니다.

인스큐어뱅크 자바 파일로 안드로이드 스튜디오 이용해 한 번 봐보겠습니다.

 

Android-InsecureBankv2-master\InsecureBankv2\app\src\main\java\com\android\insecurebankv2

 

자바 파일 위치는 여기에 있습니다.

위치가 많이 복잡하네요

 

그리고 안드로이드 스튜디오 통해 봐 보시면 (안드로이드 스튜디오로 여는데 시간 오래 걸립니다!)

 

이렇게 볼 수 있습니다.

 

간단하게 Find in Path 통해 단어를 검색해보겠습니다.

Find in Path는 경로 안에 단어를 검색해주는 안드로이드 스튜디오 기능입니다!

최신 버전이시면 Find in files 라고 있을 거예요

 

단어 혹은 파일을 찾아주는 기능입니다.

 

그리고 한 번 인스큐어뱅크의 공동 로그인 계정인 jack을 검색해 보겠습니다.

 

 

총 4곳에서 주석 처리로 jack의 계정이랑 비번에 적혀져 있네요?

 

보시면 중간에 경로가 적혀 있고요. 그다음에 어느 라인에 이 단어가 적혀있는지 알려주고 있습니다.

ChangePassword.java에 134라인의 주석에 들어가 있다고 하네요.

보아하니 jack의 계정이랑 비밀번호까지 적혀 있네요! 그럼 취약점에 잡을 수 있는 겁니다.

 

 

그래서 보통 passwd 혹은 password을 검색을 해봐서 중요 정보가 노출이 되어 있는지 확인한다고 합니다.

 

또 여기에 secret key를 검색해보겠습니다.

 

매우 잘 못된 코딩

 

이 key는 양방향 통신 할 때 쓰이는 키값입니다. 암호화할 때나 복호화할 때 쓰이는 키 값이 파일에 적혀 있는 게 매우 잘 못 되긴 합니다!

 

일단 이것도 하드 코드로 발견한 취약점 중 하나겠죠!

 

 

 

------------------------------------------------------------

 

이태까지 간단하게 하드 코드를 봐보았습니다.

하지만 평소에 apk만 있지 저렇게 소스코드를 주진 않죠.

 

그래서 JADX을 이용하겠습니다.

 

 

자바 코드 분석 도구

 

Dex값을 Java로 변환하는 디컴파일러입니다.

안드로이드의 DEX 혹은 APK 파일에 JAVA 소스 코드를 보기 위해 쓰이는 도구라고 보시면 돼요

 

특징은 APK 파인 dex 파일을 자바 클래스로 디컴파일 해주고

resources.arsc에서 AndroidManifest.xml 파일을 디코딩해줍니다.

 

resources.arsc 파일에는 앱의 리소스 정보들이 압축되어 저장되는 곳입니다. 여기에 레이아웃, 문자열, 이미지

등등 다양한 리소스들의 정보가 포함됩니다.

 

그중 AndroidManifest.xml에는 앱의 메타데이터와 앱의 구성 정보를 포함합니다!

간단히 말하면 앱의 핵심적인 정보를 설명합니다. 앱의 이름, 패키지 이름, 권한 요청, 액티비티 실행 순서 등 정의합니다.

중요한 정보가 담긴 파일이라고 보시면 돼요.

 

 

-하드코드 취약점 대응방안

당연히 중요정보를 하드코드 안 하게 제거해야 되겠죠?

그리고 중요한 키 값이 소스 코드 내에 이용되면 암호화해서 보호해야만 해야죠.

개발자용이나 테스트 계정 등 개발에 사용한 정보에 주의를 기울여 개발해야 해야만 합니다.

 

 

그럼 다음 포스팅에 jadx을 직접 실습해보겠습니다.