계: Environment

이 섹션에는 소스 코드 외부에 있지만 제작 중인 제품의 보안에는 여전히 중요한 내용이 모두 포함되어 있습니다. 이 섹션에서 다루는 문제들은 소스 코드와 직접적으로 관련이 없기 때문에 나머지 섹션과 분리했습니다.

Insecure Compiler Optimization

Abstract
메모리에서 민감한 데이터를 잘못 초기화하면 보안에 문제가 발생할 수 있습니다.
Explanation
컴파일러 최적화 오류는 다음 경우에 발생합니다.

1. 기밀 데이터를 메모리에 저장합니다.

2. 기밀 데이터를 덮어써서 메모리에서 초기화합니다.



3. 소스 코드는 최적화 컴파일러(optimizing compiler)를 사용하여 컴파일되는데 최적화 컴파일러는 이후에 메모리가 사용되지 않기 때문에 메모리 내용을 불필요한 저장 공간으로 보고 덮어쓰는 함수를 식별하여 제거합니다.
예제 1: 다음 코드는 사용자로부터 암호를 읽고 백 엔드 메인프레임에 연결한 다음 memset()을 사용하여 메모리에서 암호를 초기화합니다.


void GetData(char *MFAddr) {
char pwd[64];
if (GetPasswordFromUser(pwd, sizeof(pwd))) {
if (ConnectToMainframe(MFAddr, pwd)) {
// Interaction with mainframe
}
}
memset(pwd, 0, sizeof(pwd));
}


예제의 코드는 그대로 실행하면 올바로 동작하지만, Microsoft Visual C++(R) .NET 또는 GCC 3.x와 같은 최적화 컴파일러(optimizing compiler)를 사용하여 코드를 컴파일하면, 버퍼 pwd의 값을 덮어쓴 후 버퍼를 사용하지 않기 때문에 memset() 호출은 불필요한 저장 공간으로 간주되어 삭제됩니다[2]. 버퍼 pwd에는 민감한 값이 들어 있기 때문에 데이터가 메모리에 남아 있으면 응용 프로그램이 공격에 취약해질 수 있습니다. 공격자가 정확한 메모리 영역에 접근하게 되면 복구된 암호를 사용하여 시스템에 대한 제어를 얻을 수 있습니다.

공격자가 시스템 암호를 알아내지 못하도록 암호나 암호화 키와 같이 메모리에서 조작되는 민감한 데이터를 덮어쓰는 것은 일반적인 형태입니다. 하지만 최적화 컴파일러(optimizing compiler)를 사용하면 프로그램이 항상 소스 코드가 의도한 대로 동작하지는 않습니다. 이 예제에서는 호출이 일어나는 분명한 보안상의 이유가 있음에도 불구하고 데이터가 쓰여진 메모리가 이후에 사용되지 않는다는 이유로 컴파일러가 memset() 호출을 dead code로 해석합니다. 이 때, 문제는 많은 컴파일러 및 많은 프로그래밍 언어가 효율 개선을 이유로 이러한 보안 문제 또는 다른 보안 문제를 고려하지 않는다는 점입니다.

일반적으로 공격자는 코어 덤프 또는 런타임 메커니즘을 이용하여 특정 응용 프로그램이 사용하는 메모리에 액세스하여 비밀 정보를 알아내는 방식으로 이런 종류의 취약점을 익스플로이트합니다. 공격자가 비밀 정보에 액세스하게 되면 시스템을 더 익스플로이트하는 것이 비교적 간단해지므로 응용 프로그램이 사용하는 리소스를 손상시킬 수도 있습니다.
References
[1] M. Howard Some Bad News and Some Good News Microsoft
[2] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[3] Standards Mapping - Common Weakness Enumeration CWE ID 14
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001090
[5] Standards Mapping - FIPS200 MP
[6] Standards Mapping - General Data Protection Regulation (GDPR) Privacy Violation
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-4 Information in Shared Resources (P1)
[8] Standards Mapping - NIST Special Publication 800-53 Revision 5 SC-4 Information in Shared System Resources
[9] Standards Mapping - OWASP Mobile 2014 M4 Unintended Data Leakage
[10] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-STORAGE-2
[11] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[12] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[13] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[14] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[15] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[16] Standards Mapping - OWASP Top 10 2021 A05 Security Misconfiguration
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.4, Requirement 6.5.8, Requirement 8.4
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.4, Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.4, Requirement 6.5.3, Requirement 8.4
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.4, Requirement 6.5.3, Requirement 8.2.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.4, Requirement 6.5.3, Requirement 8.2.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.4, Requirement 6.5.3, Requirement 8.2.1
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 3.4, Requirement 6.5.3, Requirement 8.2.1
[24] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 3.5.1, Requirement 6.2.4, Requirement 8.3.1
[25] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 3.3.2, Requirement 3.3.3, Requirement 3.5.1, Requirement 6.2.4, Requirement 8.3.1
[26] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[27] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection
[28] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection
[29] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3230.2 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3230.2 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3230.2 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3230.2 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3230.2 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3230.2 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3230.2 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002380 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002380 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002380 CAT II
[39] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002380 CAT II
[40] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002380 CAT II
[41] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002380 CAT II
[42] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002380 CAT II
[43] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002380 CAT II
[44] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002380 CAT II
[45] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002380 CAT II
[46] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002380 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002380 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002380 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002380 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002380 CAT II
desc.semantic.cpp.insecure_compiler_optimization