[안드로이드 모의해킹] 중요정보(개인정보) 판단하기

직접 연구하여 작성한 자료입니다. 공식 출처가 명시되지 않은 자료의 무단 복제, 사용을 금지합니다.
공격 기법은 학습용, 허가된 환경에서 실습 바랍니다. 실 운영망 대상 공격은 처벌받습니다. (정보통신망법 제48조 1항)

개요

  정보가 저장되는 위치와 값을 확인했다면 정보의 중요성과 민감도를 판단하는 과정이 필요하다.찾은 정보가 중요정보인지 여부를 판단하는 기준을 수립하기 위해 안드로이드 단말에 존재하는 정보 자산과 기능 자산의 유형을 소개한다. 앱을 분석할 때 다음의 기능들을 포함하여 안전한 데이터 처리를 구현하고 있는지 확인한다.

 

정보 요소
전화번호 단말기 전화번호
통화기록 통화시간, 날짜, 수발신 기록 등
IMEI 단말기 ID
센서 정보 Wi-Fi, Bluetooth, NFC, 조도 센서, 근접 센서 등
설정 정보 핫스팟 설정, 인증정보 등
계정 정보 구글 계정 정보, 서드파티 로그인 정보

. 단말기에서 생성하고 관리하는 정보들

 

정보 요소
전화 번호 휴대전화번호, 회사 연락처 등
사진 원본 사진, 사진 메타데이터, 섬네일 이미지 등
별명(Nickname) SNS 별명, 배달앱 별명, 익명 리뷰 별명 등
주소 국가, 지역(시군구), 도로명 주소, 우편번호 등
서버 주소 웹서버 주소, FTP 서버 주소, 회사 공식홈페이지 주소 등
멤버십 회원등급, 소속그룹, 직책, 역할 등
결제정보 결제수단, 포인트, 할인쿠폰, 청구지 주소 등

. 앱을 사용하면서 관리하는 정보들

대한민국의 「개인정보 보호법」에서 정의하는 개인정보는 살아 있는 개인에 관한 정보로 아래에 해당하는 정보를 말한다.

성명, 주민등록번호 및 영상 등을 통하여 개인을 알아볼 수 있는 정보
해당 정보만으로는 특정 개인을 알아볼 수 없더라도 다른 정보와 쉽게 결합하여 알아볼 수 있는 정보
③ ①또는 를 가명처리함으로써 원래의 상태로 복원하기 위한 추가 정보의 사용, 결합 없이는 특정 개인을 알아볼 수 없는 정보(가명정보)

개인정보 포털(https://privacy.go.kr)에서 안내하고 있는 개인정보 유형 및 예시는 다음과 같다.

구분 내용
인적사항 일반정보 성명, 주민등록번호, 주소, 연락처, 생년월일, 출생지, 성별 등
가족정보 가족관계 및 가족구성원 정보 등
신체적 정보 신체정보 얼굴, 홍채, 음성, 유전자 정보, 지문, , 몸무게 등
의료 및 건강정보 건강상태, 진료기록, 신체장애, 병력, 혈액형, IQ, 약물테스트 등 신체검사 정보 등
정신적 정보 기호 및 성향정보 도서·비디오 등 대여기록, 잡지구독정보, 물품구매내역, 웹사이트 검색내역 등
내면의 비밀정보 사상, 신조, 종교, 가치관, 정당·노조 가입여부 및 활동내역 등
사회적 정보 교육정보 학력, 성적,출석상황, 기술 자격증 및 전문 면허증 보유내역, 상벌기록, 생활기록부, 건강기록부 등
병역정보 병역여부, 군번 및 계급, 제대유형, 근무부대, 주특기 등
근로정보 직장, 고용주, 근무처, 근무경력, 상벌기록, 직무평가기록 등
법적정보 전과·범죄 기록, 재판 기록, 과태료 납부내역 등
재산적 정보 소득정보 봉급액, 보너스 및 수수료, 이자소득, 사업소득 등
신용정보 대출 및 담보설정 내역, 신용카드번호, 통장계좌번호, 신용평가 정보 등
부동산 정보 소유주택, 토지, 자동차, 기타 소유차량, 상점 및 건물 등
기타 수익 정보 보험(건강, 생명 등), 가입현황, 휴가, 병가 등
기타 정보 통신정보 E-mail 주소, 전화통화내역, 로그파일, 쿠키 등
위치정보 GPS 및 휴대폰에 의한 개인의 위치정보
습관 및 취미정보 흡연여부, 음주량, 선호하는 스포츠 및 오락, 여가활동, 도박성성향 등

. 개인정보 유형

  개인정보는 고정불변의 개념보다는 시대, 기술, 인식의 발전 및 변화에 따라 확대대는 개념으로 보아야 한다. 다양한 곳에서 데이터를 얻고 인공지능과 같은 신기술로 재가공 및 융합되고 있는 만큼, 진단할 때에 민감도 기준을 세밀하게 선정해야 한다.

 

보안대책

1)     민감한 데이터의 평문 저장 금지

DB를 사용하여 데이터를 저장할 때 민감정보가 포함된 경우 AES256 암호화를 지원하는‘SQLCipher’등 확장 라이브러리를 사용하여 데이터를 암호화할 수 있다. 다음의 코드는 데이터베이스 초기화 프로세스에서 SQLCipherInitializer.Initialize() 호출부터 데이터베이스를 암호화하는 코드의 예제이다.

 

import android.content.Context;
// import android.database.sqlite*, import net.sqlcipher.database* 대체하여 사용
import net.sqlcipher.database.SQLiteDatabase;
import java.io.File;
public class SQLCipherInitializer {
        static SQLiteDatabase Initialize(Context ctx, String dbName, String password) { // DB 사용하기 , 필요 라이브러리 로드 초기화
               SQLiteDatabase.loadLibs(ctx);
               File databaseFile = ctx.getDatabasePath(dbName);
               return SQLiteDatabase.openOrCreateDatabase(databaseFile, password, null);
        }
}

코드. SQLCipher를 사용한 데이터베이스 암호화

또한 민감한 데이터를 일시적으로 저장해서 사용해야 하는 경우 앱 별 저장소의 캐시를 이용하여 데이터를 저장할 수 있다. 앱에서만 접근 가능한 경로를 사용하며 파일에 저장된 정보의 공개 여부에 관계 없이 파일은 비공개로 유지하도록 한다. 다음은 사용중인 앱에서만 접근 가능한 파일을 생성하는 코드의 예제이다.

 

public class PrivateFileActivity extends Activity {
        private TextView mFileView;
        private static final String FILE_NAME = "private_file.dat";
        ...
        public void onCreateFileClick(View view) {
               FileOutputStream fos = null;
               try {
                       fos = openFileOutput(FILE_NAME, MODE_PRIVATE);
// 민감정보 저장을 위한 파일 핸들러 처리
// MODE_PRIVATE: 해당 파일을 생성한 앱에서만 접근할 있도록 파일을 보호하는 역할
// 파일 생성시 앱별 디렉터리 생성
                       fos.write(new String("Not sensitive information (File Activity)\n").getBytes());
               } catch (FileNotFoundException e) {
                       mFileView.setText(R.string.file_view); } catch (IOException e) {
               android.util.Log.e("PrivateFileActivity", "File Read Error");
               } finally {
                       if (fos != null) {
                               try {
                                      fos.close();
                               } catch (IOException e) { android.util.Log.e("PrivateFileActivity", "failed to close file");
                       }
               }
        }
        finish();
}

코드. 앱별 디렉터리 내 파일 생성 예제

위 코드는 다른 앱에서의 접근을 차단하기 위해 파일 쓰기 모드를 ‘MODE_PRIVATE’로 설정하였다. 하지만 루트 사용자는 저장된 파일에 대해서 접근이 가능하기 때문에 완전한 보안대책은 될 수 없다. 중요정보의 파일 저장이 필요한 경우 암호화를 수행하여 저장하도록 한다.

2)     데이터 종류별로 적절한 저장소 사용

  구글에서 권고하고 있는 데이터 유형별 저장소이다.

데이터 유형 저장소
공유 미디어 공유 저장소, 외부 저장소
구조화된 데이터
(-값 데이터)
Shared Preferences, json 파일
3개 열 이상 데이터 데이터베이스
대용량 데이터 외부 저장소

. 데이터 유형 및 권장 저장 위치

 

3)     파일에 저장된 데이터를 불러올 때에도 무결성 검증 실시

저장된 데이터가 변조된 데이터일 수 있으므로 사용 시에도 무결성 검증을 실시한다. 다른 애플리케이션과 필요한 정보를 교환할 때에도 안드로이드에서 제공하는 컴포넌트(컨텐츠 프로바이더, 서비스 등)을 사용하여 교환한다.

 

 

반응형