외로운 Nova의 작업실

insecurebankv2 - 하드코딩 보안 본문

Mobile App Penetesting/Android App Vulnerability

insecurebankv2 - 하드코딩 보안

Nova_ 2023. 6. 2. 21:27

- 취약점 소개

하드코딩이란 패스워드나 중요 정보 또는 암호화키를 불러오지않고 직접 코드내에 써넣는 것을 말합니다. 이처럼 하드코딩을 하게되면 디컴파일 했을때 중요 정보나 패스워드등을 노출할 수 있습니다.

 

- 취약점 진단 과정

디컴파일 후 소스코드에 중요정보가 있는 지 확인합니다.

 

<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;

키값이 하드코딩 되어있습니다.

 

- 취약점 대응 방안

코드 주석 처리에 주의를 기울이고 암호화키의 경우 상수로 명시하면 안되고 솔트를 사용하여 암호화의 안정성을 높이는 것이 중요합니다. 솔트를 사용할 경우 예측이 어려운 난수를 사용해야합니다.

Comments