계: Environment
이 섹션에는 소스 코드 외부에 있지만 제작 중인 제품의 보안에는 여전히 중요한 내용이 모두 포함되어 있습니다. 이 섹션에서 다루는 문제들은 소스 코드와 직접적으로 관련이 없기 때문에 나머지 섹션과 분리했습니다.
J2EE Misconfiguration: Insufficient Session ID Length
Abstract
세션 ID는 세션 ID를 알아내기 위한 무차별 대입 공격을 막기 위해 길이가 128비트 이상이어야 합니다.
Explanation
WebLogic 배포 설명자는 최소 24바이트 길이의 세션 ID를 지정해야 합니다. 이보다 짧은 세션 ID를 사용하면 응용 프로그램이 무차별 대입 공격에 취약해집니다. 공격자가 인증된 사용자의 세션 ID를 알아내면 사용자의 세션을 가로챌 수 있습니다. 이 글의 나머지 부분에서는 24바이트 세션 ID가 필요한 이유를 자세히 설명합니다.
세션 ID는 62개 영숫자의 의사 난수 선택으로 구성되어 있습니다. 이는 문자열이 실질적으로 무작위 방식으로 구성되었을 경우, 각 바이트는 최대 6비트의 엔트로피를 만들 수 있음을 의미합니다.
올바른 세션 ID를 추측하는 데 필요한 예상 시간(초)은 다음 식으로 구할 수 있습니다.
(2^B+1) / (2*A*S)
관련 설명:
- B는 세션 ID의 엔트로피의 비트 수입니다.
- A는 공격자가 1초에 시도할 수 있는 추측의 횟수입니다.
- S는 임의의 시간에 추측할 수 있는 유효한 세션 ID의 개수입니다.
세션 ID의 엔트로피의 비트 수는 항상 세션 ID의 총 비트 수보다 작습니다. 예를 들어, 세션 ID가 오름차순이라면 ID의 길이에 관계없이 세션 ID 엔트로피 비트 수가 0에 가까울 것입니다. 우수한 난수 발생기를 사용하여 세션 ID를 생성한다고 가정하면 세션 ID의 엔트로피의 비트 수는 세션 ID의 총 비트 수의 절반이 됩니다. 실제 ID 길이의 경우, 이것이 가능하지만 낙관적인 감이 있습니다.
공격자가 수백 또는 수천 대의 무인 컴퓨터를 가지고 봇네트(botnet)를 사용한다면 초당 수만 개의 추측을 시도한다고 가정하는 것이 타당합니다. 해당 웹 사이트가 대형 인기있는 웹 사이트라면 한동안 대량 무차별 대입을 발견하지 못할 수 있습니다.
추측할 수 있는 유효한 세션 ID 수의 하한(lower bound)은 임의의 순간에 사이트를 사용하고 있는 사용자 수입니다. 하지만 로그아웃하지 않고 세션을 떠난 사용자 때문에 이 수가 늘어납니다. (이는 비활성 세션 제한 시간을 짧게 하는 이유 중 하나입니다.)
64비트 세션 ID의 경우 32비트 엔트로피를 가정합니다. 대형 웹 사이트의 경우, 공격자가 초당 1,000번의 추측을 시도할 수 있고 임의의 순간에 10,000개의 유효한 세션 ID가 있다고 가정합니다. 이렇게 가정하면, 공격자가 유효한 세션 ID를 알아내는 데 성공하기 위한 예상 시간은 4분 미만입니다.
이번에는 128비트 세션 ID에서 64비트 엔트로피를 제공한다고 가정합니다. 초대형 웹 사이트에서 공격자는 초당 10,000번의 추측을 시도할 수 있고 추측할 수 있는 유효한 세션 ID는 100,000개입니다. 이렇게 가정하면, 공격자가 유효한 세션 ID를 알아내는 데 성공하는 예상 시간은 292년이 넘습니다.
비트에서 바이트로 역방향 작업을 하는 세션 ID는 128/6이어야 합니다. 이는 약 21바이트를 생성합니다. 그뿐만 아니라, 경험 상, 테스트를 해 보면 세션 ID의 첫 3바이트가 무작위로 생성되지 않음을 보여줍니다. 이는 원하는 64비트 엔트로피를 얻으려면 세션 ID 24바이트 길이를 사용하도록 WebLogic을 구성해야 함을 의미합니다.
세션 ID는 62개 영숫자의 의사 난수 선택으로 구성되어 있습니다. 이는 문자열이 실질적으로 무작위 방식으로 구성되었을 경우, 각 바이트는 최대 6비트의 엔트로피를 만들 수 있음을 의미합니다.
올바른 세션 ID를 추측하는 데 필요한 예상 시간(초)은 다음 식으로 구할 수 있습니다.
(2^B+1) / (2*A*S)
관련 설명:
- B는 세션 ID의 엔트로피의 비트 수입니다.
- A는 공격자가 1초에 시도할 수 있는 추측의 횟수입니다.
- S는 임의의 시간에 추측할 수 있는 유효한 세션 ID의 개수입니다.
세션 ID의 엔트로피의 비트 수는 항상 세션 ID의 총 비트 수보다 작습니다. 예를 들어, 세션 ID가 오름차순이라면 ID의 길이에 관계없이 세션 ID 엔트로피 비트 수가 0에 가까울 것입니다. 우수한 난수 발생기를 사용하여 세션 ID를 생성한다고 가정하면 세션 ID의 엔트로피의 비트 수는 세션 ID의 총 비트 수의 절반이 됩니다. 실제 ID 길이의 경우, 이것이 가능하지만 낙관적인 감이 있습니다.
공격자가 수백 또는 수천 대의 무인 컴퓨터를 가지고 봇네트(botnet)를 사용한다면 초당 수만 개의 추측을 시도한다고 가정하는 것이 타당합니다. 해당 웹 사이트가 대형 인기있는 웹 사이트라면 한동안 대량 무차별 대입을 발견하지 못할 수 있습니다.
추측할 수 있는 유효한 세션 ID 수의 하한(lower bound)은 임의의 순간에 사이트를 사용하고 있는 사용자 수입니다. 하지만 로그아웃하지 않고 세션을 떠난 사용자 때문에 이 수가 늘어납니다. (이는 비활성 세션 제한 시간을 짧게 하는 이유 중 하나입니다.)
64비트 세션 ID의 경우 32비트 엔트로피를 가정합니다. 대형 웹 사이트의 경우, 공격자가 초당 1,000번의 추측을 시도할 수 있고 임의의 순간에 10,000개의 유효한 세션 ID가 있다고 가정합니다. 이렇게 가정하면, 공격자가 유효한 세션 ID를 알아내는 데 성공하기 위한 예상 시간은 4분 미만입니다.
이번에는 128비트 세션 ID에서 64비트 엔트로피를 제공한다고 가정합니다. 초대형 웹 사이트에서 공격자는 초당 10,000번의 추측을 시도할 수 있고 추측할 수 있는 유효한 세션 ID는 100,000개입니다. 이렇게 가정하면, 공격자가 유효한 세션 ID를 알아내는 데 성공하는 예상 시간은 292년이 넘습니다.
비트에서 바이트로 역방향 작업을 하는 세션 ID는 128/6이어야 합니다. 이는 약 21바이트를 생성합니다. 그뿐만 아니라, 경험 상, 테스트를 해 보면 세션 ID의 첫 3바이트가 무작위로 생성되지 않음을 보여줍니다. 이는 원하는 64비트 엔트로피를 얻으려면 세션 ID 24바이트 길이를 사용하도록 WebLogic을 구성해야 함을 의미합니다.
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 6
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001941, CCI-001942
[3] Standards Mapping - FIPS200 IA
[4] Standards Mapping - General Data Protection Regulation (GDPR) Access Violation
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 IA-2 Identification and Authentication (Organizational Users) (P1), SC-23 Session Authenticity (P1)
[6] Standards Mapping - NIST Special Publication 800-53 Revision 5 IA-2 Identification and Authentication (Organizational Users), SC-23 Session Authenticity
[7] Standards Mapping - OWASP API 2023 API8 Security Misconfiguration
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 14.1.3 Build (L2 L3)
[9] Standards Mapping - OWASP Mobile 2014 M9 Improper Session Handling
[10] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[11] Standards Mapping - OWASP Top 10 2007 A7 Broken Authentication and Session Management
[12] Standards Mapping - OWASP Top 10 2010 A3 Broken Authentication and Session Management
[13] Standards Mapping - OWASP Top 10 2013 A2 Broken Authentication and Session Management
[14] Standards Mapping - OWASP Top 10 2017 A2 Broken Authentication
[15] Standards Mapping - OWASP Top 10 2021 A05 Security Misconfiguration
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.7
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.10
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[24] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[25] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[26] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection
[27] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection
[28] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3405 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3405 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3405 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3405 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3405 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3405 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3405 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[39] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[40] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[41] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[42] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[43] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[44] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[45] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[46] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[50] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authentication (WASC-01)
[51] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
desc.config.java.j2ee_misconfiguration_insufficient_session_id_length