티스토리 뷰

반응형

취약점 소개

하드코딩은 데이터를 코드 내부에 직접 입력하는 것이다.
즉, 프로그램의 소스 코드에 데이터를 직접 입력해서 저장한 경우를 뜻하며
상수 사용도 하드 코딩에 속한다.
아이디, 비밀번호, 키 등 중요한 정보를 주석 처리하는 것도
모바일 앱에서는 하드코딩 취약점으로 판단되는데,
이는 안드로이드 모바일 앱의 디컴파일이 가능한 이유에서 정보가 노출되므로 그러하다.



아래와 같이 파일 입출력 시 파일의 경로를 직접적으로 입력한 경우도 해당한다.

File file = new File("C:/pentester/saemoi/");
표 3-1 하드코딩의 대표적 예




취약점 진단 수행

인시큐어뱅크 앱의 하드코드된 데이터들을 알아본다.
우리는 개발 단계에서 사용하는 로그인 계정의 아이디와 비밀번호를 알고 있다.
계정 정보는 다음과 같다.



인시큐어뱅크 앱 로그인 계정 정보

1) ID : dinesh PW : Dinesh@123$
2) ID : jack PW : Jack@123$

표 3-2 인시큐어뱅크 앱의 로그인 계정 정보




이제 인시큐어뱅크 앱 코드에서 이 정보들의 하드코딩 유무를 확인한다.
아래 그림과 같이 Find in Files... 기능을 활용하면
app 디렉터리에 있는 모든 파일에서 결과를 찾을 수 있다.



그림 3-1 파일 내의 모든 내용 찾기 기능



ChangePassword, DoLogin 파일에서의 하드코딩

jack을 검색하자,
ChangePassword 파일과 DoLogin 파일에서 주석으로 처리된 하드코딩 부분을 확인했다.



그림 3-2 하드코딩 된 중요 정보 확인



AES 암호화의 대칭키가 하드코딩 됨

또한, AES 암호화의 대칭키였던 This is the super secret key 123 까지 주석처리 되어있다.
이런 경우는 아무리 비도가 강한 대칭키 알고리즘이라도 키가 노출되어 소용이 없게 된다.
데이터를 암호화한다고 해도 복호화 키를 알고 있는 셈이라 암호화가 소용없게 된다.




그림 3-3 AES 암호화의 대칭키가 하드코딩 되어 노출됨





대응 방안

1. 개발과정에서

개발자용 테스트 계정을 주석으로 남기지 말아야 한다.
하지만 프로그램이 크고 복잡한 경우,
주석을 하나씩 확인해서 위험한 정보가 포함되었는지 확인하기가 어려우므로
주석을 작성할 때에 유의해야 한다.


2. 암호화 키

암호화 키는 상수로 명시하지 않고,
솔트를 사용한 난수 사용을 하거나 서버에 저장하는 것이 옳다.


반응형
댓글
반응형
Recent Post.
Recent Reply.
Thanks for comming.
오늘은
명이 방문했어요
어제는
명이 방문했어요