앱 진단(Android)/Insecurebank 실습

8. 취약한 암호화 실행

보안개구리 2024. 7. 8. 14:04

[개 요]

 'Weak Cryptography implementation'은 암호 알고리즘에 대한 취약점입니다. 암호 알고리즘을 사용할 때는 표준화된 알고리즘을 사용하고, 알고리즘에 결함이 발생한 알고리즘/오래된 암호 알고리즘 보안에 취약하기 때문에 키값을 갖고 있더라도 해독될 수 있습니다. 따라서 암호 알고리즘은

- 취약 알고리즘: RC2, RC4, RC5, MD4, MD5, SHA1, DES, 3DES

 

[진단 과정]

1) 다음은 LoginActivity.java 파일의 코드중 일부입니다. 아이디와 비밀번호에 해당하는 변수를 입력받아 아이디는 Base64 인코딩을, 비밀번호는 AES로  암호화하고 있습니다.

LoginActivity.java

 

2) 다음은 문제가 있는 CrytpoClass.java 파일의 코드입니다. AES에서 사용되는 키값을 String 변수에 그대로 넣는 방식으로 하드코딩하여 취약점을 노출했는데 암호 알고리즘을 사용하더라도 키값이 상수 형태로 프로그램 내부에 존재하는 것은 위험합니다. 또한 초기화 벡터(IV)에 전부 0값을 넣어 사용했는데 초기화 벡터는 프로그램이 실행된 후 생성하는것이 안전합니다.

 마지막으로 암호화 로직을 살펴보면 AES/CBC/PKCSPadding로 설정되어 있는데 이는 초기화 벡터는 AES 알고리즘을 사용하여 CBC 모드로 운영하며, 패딩은 PKCS방식으로 사용하는 것을 의미하는데 솔트값 없이 암호 알고리즘을 사용했다는 점이 문제입니다. 

* 솔트(salt): 암호 해싱 과정에서 보안 강화를 위해 사용되는 무작위 데이터. 주로 비밀번호를 해시할 때 사용되며, 동일한 비밀번호가 해시되어도 각기 다른 해시값을 생성해주는 역할을 함. 사전공격 및 무차별 대입 공격 예방 효과

CryptoClass.java

 

3) 이렇게 취약점이 노출될 경우 "3. 로컬 암호화 이슈(Local Encryption Issue)" 실습에서 진행했던것처럼 키값을 통해 복호화를 하여 패스워드를 알아낼 수 있습니다.

[대응 방안]

 암호 알고리즘은 학계 및 업계에서 검증된 표준화된 알고리즘을 사용하며 대칭키 암호 알고리즘 사용시 주의점은 다음과 같습니다.

- 암호화 모드와 패딩을 명시적으로 지정

- 강한 암호화 기술을 사용하며, 암호화 모드와 패딩을 포함

- 암호키의 값은 솔트를 사용

- 암호키의 값은 적절한 해시 반복 횟수를 지정

- 암호화 강도를 보장하기 위해 충분한 키의 길이를 사용