이전에 만들었던 웹앱에 보안검토 내용을 바탕으로 습득한 지식을 정리했다.
앞으로 프로젝트를 해가면서 참고될 수 있었으면 좋겠다.
크게 3가지 정도로 뽑았다.
1. 루팅된 기기를 감지/탐지 해서 사용하지 못하도록 해야한다.
* 안드로이드 루팅이란
- 루팅은 모바일 기기에서 구동되는 안드로이드 운영체제 상에서 최상위 권한(루트권한)을 얻음으로 해당기기의 생산자 또는 판매자 측에서 걸어놓은 제약을 해제하는 행위이다.
<대응방안>
- 안드로이드에서 루팅을 감지하는 방법은 여러가지가 있다.
- 일반적으로 su파일이나 superuser.apk등 루팅시 생성되는 파일 이름을 기반으로 탐지한다.
<해결책>
- su명령어를 직접 실행시켜 Exception이 발생 여부에 따라 디바이스의 루팅을 감지
감지 한후 다이얼로그를 통해 앱을 종료시킬것
- 환경변수 su존재, 단말기의 빌드태그, 루팅관련파일 탐지후 앱을 종료시킬것.
2. 백업 기법을 이용한 해킹을 방지 해야한다.
'allowBackup'플래그를 'false'로 설정하는것이 좋다.
민감한 데이터는 개인 디렉토리나 하위 디렉토리에 있는 파일이나 폴더에 일반 텍스트로 저장하지 않는것이 좋다.
백업기법을 사용하여 앱을 해킹할수 있고, 공유환경설정 데이터가 삭제되지 않아 그에 따른문제가 발생 할수 있다.
* android:allowBackup
- 앱이 백업 및 복원 인프라에 참여하도록 허용할지 여부
false로 설정할 경우 앱의 복원 또는 백업이 수행 되지 않는다.
<대응방안>
- Manifests.xml -> allowBackup 플래그 false로 설정
<해결책>
- allowBackup:false
- fullbackupContent:false
다른 플러그인이 있을시, 충돌 가능성
tools:replace = "android:allowBackup"
3. 리버스 엔지니어링 공격으로부터 보호해야 한다.
앱을 더 복잡하게 만드는 것이 좋다. 리버스 엔지니어링 공격으로부터 보호해야 한다.
프로세스에 연결할수 있는 디버거기능을 제한하는 것이 좋다.
네이티브 바이너리를 제거하면 리버스엔지니어링하는데 필요한기술이 향상된다.
* 리버스 엔지니어링(역공학)
- Apk 파일을 분해한후 컴파일된 바이너리로부터 원본소스코드를 얻어내는 프로세스
<대응방안>
-Manifests.xml -> debuggable 플래그 false로 설정
프로가드 툴을 사용해 코드 난독화
<해결책>
- debuggable:false
- tools:ignore="HardcodedDebugMode"
빨간줄 일시 Lint환경설정 풀어주기
프로가드 수정을 통한 코드 난독화
'Before > Android' 카테고리의 다른 글
android flavor(앱 분리) (0) | 2020.05.15 |
---|---|
Constraint Layout (0) | 2020.04.10 |
데이터 베이스, SharedPreference (0) | 2020.03.16 |
Tablayout, Pager (0) | 2020.03.16 |
RecyclerView (0) | 2020.03.13 |