외로운 Nova의 작업실
insecurebankv2 - 하드코딩 보안 본문
- 취약점 소개
하드코딩이란 패스워드나 중요 정보 또는 암호화키를 불러오지않고 직접 코드내에 써넣는 것을 말합니다. 이처럼 하드코딩을 하게되면 디컴파일 했을때 중요 정보나 패스워드등을 노출할 수 있습니다.
- 취약점 진단 과정
디컴파일 후 소스코드에 중요정보가 있는 지 확인합니다.
<ChangePassword.java>
public void postData(String valueIWantToSend) throws ClientProtocolException, IOException, JSONException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(protocol + serverip + ":" + serverport + "/changepassword");
List < NameValuePair > nameValuePairs = new ArrayList < NameValuePair > (2);
/*
Delete below test accounts once the application goes into production phase.
nameValuePairs.add(new BasicNameValuePair("username", "jack"));
nameValuePairs.add(new BasicNameValuePair("password", "Jack@123$"));
*/
주석에 아이디와 비밀번호가 쓰여있는 것을 확인할 수 있습니다.
<DoLogin.java>
protected void onPostExecute(Double result) {}
protected void onProgressUpdate(Integer...progress) {}
public void postData(String valueIWantToSend) throws ClientProtocolException, IOException, JSONException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(protocol + serverip + ":" + serverport + "/login");
HttpPost httppost2 = new HttpPost(protocol + serverip + ":" + serverport + "/devlogin");
// Add your data
List < NameValuePair > nameValuePairs = new ArrayList < NameValuePair > (2);
// Delete below test accounts in production
// nameValuePairs.add(new BasicNameValuePair("username", "jack"));
// nameValuePairs.add(new BasicNameValuePair("password", "jack@123$"));
여기도 주석에 아이디와 비밀번호가 쓰여있습니다.
<CryptoClass>
public class CryptoClass {
// The super secret key used by the encryption function
String key = "This is the super secret key 123";
// The initialization vector used by the encryption function
byte[] ivBytes = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
String plainText;
byte[] cipherData;
String base64Text;
String cipherText;
키값이 하드코딩 되어있습니다.
- 취약점 대응 방안
코드 주석 처리에 주의를 기울이고 암호화키의 경우 상수로 명시하면 안되고 솔트를 사용하여 암호화의 안정성을 높이는 것이 중요합니다. 솔트를 사용할 경우 예측이 어려운 난수를 사용해야합니다.
'Mobile App Penetesting > Android App Vulnerability' 카테고리의 다른 글
insecurebankv2 - 개발자 백도어 (0) | 2023.06.04 |
---|---|
insecurebankv2 - 사용자 정보 목록 이슈화 (0) | 2023.06.03 |
insecurebankv2 - 인자전달값 조작 (0) | 2023.06.01 |
insecurebankv2 - 안전하지 않은 HTTP 통신 (0) | 2023.05.29 |
insecurebankv2 - 런타임 조작 (0) | 2023.05.27 |
Comments