1464 개 항목 찾음
취약점
Abstract
Spring Boot μ‘μš© ν”„λ‘œκ·Έλž¨μ€ 관리 MBean을 λ…ΈμΆœν•˜λ„λ‘ κ΅¬μ„±λ©λ‹ˆλ‹€.
Explanation
Spring Bootμ—μ„œ κ°œλ°œμžλŠ” spring.application.admin.enabled 속성을 μ§€μ •ν•˜μ—¬ μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ 관리 κ΄€λ ¨ κΈ°λŠ₯을 ν™œμ„±ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ MBeanServer ν”Œλž«νΌμ—μ„œ SpringApplicationAdminMXBean이 λ…ΈμΆœλ©λ‹ˆλ‹€. κ°œλ°œμžλŠ” 이 κΈ°λŠ₯을 μ‚¬μš©ν•˜μ—¬ μ›κ²©μœΌλ‘œ Spring Boot μ‘μš© ν”„λ‘œκ·Έλž¨μ„ 관리할 수 μžˆμ§€λ§Œ 이 κΈ°λŠ₯은 원격 JMX 끝점의 ν˜•νƒœλ‘œ μΆ”κ°€ 곡격 ν‘œλ©΄μ„ λ…ΈμΆœν•©λ‹ˆλ‹€. MBeanServer의 ꡬ성에 따라 MBean은 둜컬 λ˜λŠ” μ›κ²©μœΌλ‘œ λ…ΈμΆœλ  수 있으며 인증을 μš”κ΅¬ν•˜κ±°λ‚˜ μš”κ΅¬ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΅œμ•…μ˜ 경우 κ³΅κ²©μžλŠ” 인증 없이 μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•˜λŠ” 것을 ν¬ν•¨ν•˜μ—¬ μ›κ²©μœΌλ‘œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΅œμƒμ˜ 경우 μ„œλΉ„μŠ€λŠ” μ„œλ²„λ₯Ό λ³΄ν˜Έν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” 자격 증λͺ…λ§ŒνΌ κ°•λ ₯ν•΄μ§‘λ‹ˆλ‹€.

μ°Έκ³ : CVE-2016-3427(2016λ…„ 4μ›” Java 8 μ—…λ°μ΄νŠΈ 91μ—μ„œ 해결됨)에 μ·¨μ•½ν•œ JRE 버전을 μ‚¬μš©ν•˜λŠ” 경우 κ³΅κ²©μžλŠ” μ§λ ¬ν™”λœ Java 개체λ₯Ό 자격 증λͺ…μœΌλ‘œ μ „λ‹¬ν•˜μ—¬ 원격 JVM이 이λ₯Ό 역직렬화할 λ•Œ μž„μ˜μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
References
[1] Spring Boot Reference Guide Spring
[2] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[3] Standards Mapping - OWASP API 2023 API8 Security Misconfiguration
[4] Standards Mapping - OWASP Mobile 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[6] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[7] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2021 A05 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 7.3.1
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 7.3.1
[11] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
desc.config.java.spring_boot_misconfiguration_admin_mbean_enabled
Abstract
이 Spring Boot μ‘μš© ν”„λ‘œκ·Έλž¨μ€ 개발자 λͺ¨λ“œμ—μ„œ κ΅¬μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
Explanation
이 Spring Boot μ‘μš© ν”„λ‘œκ·Έλž¨μ—λŠ” DevToolsκ°€ ν™œμ„±ν™”λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. DevToolsμ—λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨ 개발 κ²½ν—˜μ„ μ’€ 더 즐겁게 λ§Œλ“€ 수 μžˆλŠ” μΆ”κ°€ 도ꡬ μ„ΈνŠΈκ°€ ν¬ν•¨λ˜μ–΄ μžˆμ§€λ§Œ 운영 ν™˜κ²½μ˜ μ‘μš© ν”„λ‘œκ·Έλž¨μ—λŠ” DevToolsλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 곡식 Spring Boot μ„€λͺ…μ„œμ— λ‹€μŒκ³Ό 같이 λͺ…μ‹œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. "원격 μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ spring-boot-devtoolsλ₯Ό ν™œμ„±ν™”ν•˜λŠ” 것은 λ³΄μ•ˆ μœ„ν—˜μž…λ‹ˆλ‹€. 운영 λ°°ν¬μ—μ„œλŠ” 지원을 ν™œμ„±ν™”ν•˜λ©΄ μ•ˆ λ©λ‹ˆλ‹€."
References
[1] Spring Boot Reference Guide Spring
[2] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[3] Standards Mapping - OWASP API 2023 API8 Security Misconfiguration
[4] Standards Mapping - OWASP Mobile 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[6] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[7] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2021 A05 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 2.2.6
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 2.2.6
[11] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
desc.config.java.spring_boot_misconfiguration_devtools_enabled
Abstract
Spring Boot Shutdown Actuatorκ°€ ν™œμ„±ν™”λ˜μ–΄ μžˆμ–΄ μ‚¬μš©μžκ°€ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•˜λŠ” 것이 ν—ˆμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
Shutdown Actuatorλ₯Ό μ‚¬μš©ν•˜λ©΄ 인증된 μ‚¬μš©μžκ°€ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 끝점은 기본적으둜 λ―Όκ°ν•œ 끝점으둜 κ΅¬μ„±λ˜μ–΄ μžˆμœΌλ―€λ‘œ μ‚¬μš©ν•˜λ €λ©΄ 인증이 ν•„μš”ν•˜μ§€λ§Œ 자격 증λͺ…이 μ•½ν•œ κ²½μš°κ°€ μžˆκ±°λ‚˜ 앑좔에이터에 λ―Όκ°ν•˜μ§€ μ•Šμ€ κ²ƒμœΌλ‘œ ν”Œλž˜κ·Έλ₯Ό μ§€μ •ν•˜λ„λ‘ μ‘μš© ν”„λ‘œκ·Έλž¨ ꡬ성이 μˆ˜μ •λ  수 μžˆμœΌλ―€λ‘œ κ°•λ ₯ν•œ 이유 없이 ν™œμ„±ν™”ν•˜λŠ” 것은 쒋은 방법이 μ•„λ‹™λ‹ˆλ‹€.

예제 1: Spring Boot μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ Shutdown Actuatorλ₯Ό λ°°ν¬ν•˜λ„λ‘ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.


endpoints.shutdown.enabled=true
References
[1] Spring Boot Reference Guide Spring
[2] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[3] Standards Mapping - OWASP API 2023 API8 Security Misconfiguration
[4] Standards Mapping - OWASP Mobile 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[6] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[7] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2021 A05 Security Misconfiguration
[9] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
desc.config.java.spring_boot_misconfiguration_shutdown_actuator_endpoint_enabled
Abstract
이 μ‘μš© ν”„λ‘œκ·Έλž¨μ€ Spring νƒœκ·Έμ— λŒ€ν•œ μžλ™ HTML μ΄μŠ€μΌ€μ΄ν”„ 처리λ₯Ό λΉ„ν™œμ„±ν™”ν•˜λ„λ‘ κ΅¬μ„±λ˜μ–΄ μžˆμ–΄ Cross-Site Scripting μ·¨μ•½μ μœΌλ‘œ μ΄μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
Spring νƒœκ·Έμ—μ„œ HTML μ»¨ν…μŠ€νŠΈμ— λŒ€ν•œ μžλ™ μ΄μŠ€μΌ€μ΄ν”„ 처리λ₯Ό λΉ„ν™œμ„±ν™”ν•˜λ©΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ Cross-Site Scripting 곡격에 μ·¨μ•½ν•΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

예제 1: λ‹€μŒ web.xml ꡬ성은 Spring νƒœκ·Έμ— λŒ€ν•œ μžλ™ HTML μ΄μŠ€μΌ€μ΄ν”„ 처리λ₯Ό λΉ„ν™œμ„±ν™”ν•˜λ„λ‘ μ‘μš© ν”„λ‘œκ·Έλž¨μ— μ§€μ‹œν•©λ‹ˆλ‹€.


<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="true">
...
<context-param>
<param-name>defaultHtmlEscape</param-name>
<param-value>false</param-value>
</context-param>
...
</web-app>
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 554
[2] Standards Mapping - Common Weakness Enumeration Top 25 2019 [3] CWE ID 020
[3] Standards Mapping - Common Weakness Enumeration Top 25 2020 [3] CWE ID 020
[4] Standards Mapping - Common Weakness Enumeration Top 25 2021 [4] CWE ID 020
[5] Standards Mapping - Common Weakness Enumeration Top 25 2022 [4] CWE ID 020
[6] Standards Mapping - Common Weakness Enumeration Top 25 2023 [6] CWE ID 020
[7] Standards Mapping - Common Weakness Enumeration Top 25 2024 [12] CWE ID 020
[8] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002754
[9] Standards Mapping - FIPS200 CM
[10] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[11] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[12] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[13] Standards Mapping - OWASP API 2023 API8 Security Misconfiguration
[14] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.1.3 Input Validation Requirements (L1 L2 L3), 5.1.4 Input Validation Requirements (L1 L2 L3), 14.1.3 Build (L2 L3)
[15] Standards Mapping - OWASP Mobile 2014 M1 Weak Server Side Controls
[16] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[17] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[18] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[19] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[20] Standards Mapping - OWASP Top 10 2021 A05 Security Misconfiguration
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[24] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[25] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[26] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[27] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[28] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[29] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[30] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[31] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[32] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[33] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[40] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[41] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[42] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002560 CAT I
[43] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002560 CAT I
[44] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002560 CAT I
[45] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002560 CAT I
[46] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002560 CAT I
[47] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002560 CAT I
[48] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002560 CAT I
[49] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002560 CAT I
[50] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[51] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002560 CAT I
[52] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002560 CAT I
[53] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[56] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
desc.config.java.spring_misconfiguration_html_escaping_disabled
Abstract
Spring SecurityλŠ” 이전 λ³΄μ•ˆ 식과 μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” μš”μ²­μ„ ν—ˆμš©ν•˜λ„λ‘ κ΅¬μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
Explanation
Spring SecurityλŠ” μ§€λ‚˜μΉ˜κ²Œ ν—ˆμš©μ μΈ 캐치올(catch-all) μ •μ±…μœΌλ‘œ κ΅¬μ„±λ˜μ–΄ λ³΄μ•ˆ ν‘œν˜„κ³Ό μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” μš”μ²­μ— μ•‘μ„ΈμŠ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예제 1: λ‹€μŒ μ½”λ“œλŠ” 기본적으둜 μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” μš”μ²­μ„ ν—ˆμš©ν•˜λŠ” Spring Security ꡬ성을 μ •μ˜ν•©λ‹ˆλ‹€.

<http auto-config="true">
...
<intercept-url pattern="/app/admin" access="ROLE_ADMIN" />
<intercept-url pattern="/**" access="permitAll" />
</http>


이 ꡬ성이 ν˜„μž¬ λ³΄μ•ˆ ꡬ성인 κ²½μš°μ—λ„ λ‚˜μ€‘μ— μƒˆλ‘œμš΄ λΉ„κ³΅κ°œ 끝점이 μ‘μš© ν”„λ‘œκ·Έλž¨μ— 좔가될 수 μžˆμŠ΅λ‹ˆλ‹€. κ°œλ°œμžκ°€ λ³΄μ•ˆ μ •μ±… μ—…λ°μ΄νŠΈλ₯Ό μžŠμ–΄λ²„λ¦° 경우 κΈ°λ³Έ 캐치올(catch-all) κ·œμΉ™μ€ μƒˆ λΉ„κ³΅κ°œ 끝점에 λŒ€ν•œ 곡개 μ•‘μ„ΈμŠ€λ₯Ό ν—ˆμš©ν•©λ‹ˆλ‹€.
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 284
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000213, CCI-001084, CCI-002165
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - General Data Protection Regulation (GDPR) Access Violation
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1), SC-3 Security Function Isolation (P1)
[6] Standards Mapping - NIST Special Publication 800-53 Revision 5 AC-3 Access Enforcement, SC-3 Security Function Isolation
[7] Standards Mapping - OWASP API 2023 API8 Security Misconfiguration
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.4.2 Access Control Architectural Requirements (L2 L3), 1.4.4 Access Control Architectural Requirements (L2 L3)
[9] Standards Mapping - OWASP Mobile 2014 M5 Poor Authorization and Authentication
[10] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[11] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[12] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[13] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[14] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[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.2
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4
[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.8
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.8
[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 5.4 - Authentication and Access Control
[26] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 5.4 - Authentication and Access Control
[27] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 5.4 - Authentication and Access Control, Control Objective C.2.3 - Web Software Access Controls
[28] Standards Mapping - SANS Top 25 2011 Risky Resource Management - CWE ID 676
[29] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[39] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[40] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[41] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[42] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[43] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[44] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[45] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[46] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[52] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
[53] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
desc.config.java.spring_security_misconfiguration_default_permit
Abstract
Spring Security κΈ°λ³Έ λ³΄μ•ˆ ν—€λ”λŠ” λΉ„ν™œμ„±ν™”λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
Explanation
Spring SecurityλŠ” μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  수 μžˆλ„λ‘ κΈ°λ³Έ λ³΄μ•ˆ 헀더λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. Spring Securityμ—μ„œ μ‚½μž…ν•œ κΈ°λ³Έ λ³΄μ•ˆ ν—€λ”λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.


Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block


μ΄λŸ¬ν•œ ν—€λ”λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•˜λŠ” 데 μ ν•©ν•œ ν—€λ”μž…λ‹ˆλ‹€. 더 μ œν•œμ μΈ κ°’μœΌλ‘œ λ°”λ€Œμ§€ μ•ŠλŠ” ν•œ μ΄λŸ¬ν•œ 헀더λ₯Ό λΉ„ν™œμ„±ν™”ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€.

예제 1: λ‹€μŒ μ½”λ“œλŠ” Spring Security κΈ°λ³Έ 헀더λ₯Ό λΉ„ν™œμ„±ν™”ν•©λ‹ˆλ‹€.

<http auto-config="true">
...
<headers disabled="true"/>
...
</http>
References
[1] Standards Mapping - FIPS200 CM
[2] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 CM-6 Configuration Settings (P1)
[4] Standards Mapping - NIST Special Publication 800-53 Revision 5 CM-6 Configuration Settings
[5] Standards Mapping - OWASP API 2023 API8 Security Misconfiguration
[6] Standards Mapping - OWASP Mobile 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[11] Standards Mapping - OWASP Top 10 2021 A05 Security Misconfiguration
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 2.2.6
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 2.2.6
[15] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective C.3.1 - Web Software Attack Mitigation
[16] Standards Mapping - Web Application Security Consortium Version 2.00 Server Misconfiguration (WASC-14)
desc.config.java.spring_security_misconfiguration_disabled_security_headers
Abstract
Spring Securityκ°€ 잘λͺ»λœ μš”μ²­ 선택기λ₯Ό μ‚¬μš©ν•˜μ—¬ 경둜λ₯Ό λ³΄ν˜Έν•©λ‹ˆλ‹€.
Explanation
Spring SecurityλŠ” Ant 경둜 μ‹μœΌλ‘œ 끝점 보호 방법을 μ§€μ •ν–ˆμŠ΅λ‹ˆλ‹€.

예제 1: λ‹€μŒ μ˜ˆμ—μ„œ "/admin" Ant 경둜 식과 μΌμΉ˜ν•˜λŠ” λͺ¨λ“  끝점에 μ•‘μ„ΈμŠ€ν•˜λ €λ©΄ κ΄€λ¦¬μž κΆŒν•œμ΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

<http auto-config="true">
...
<intercept-url pattern="/app/admin" access="ROLE_ADMIN" />
...
<intercept-url pattern="/**" access="permitAll" />
</http>


κ·ΈλŸ¬λ‚˜ 보호된 끝점이 Spring MVC 끝점인 경우 κ³΅κ²©μžκ°€ Spring MVC μ½˜ν…νŠΈ ν˜‘μƒ κΈ°λŠ₯을 λ‚¨μš©ν•˜μ—¬ 이 μ œμ–΄λ₯Ό λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. Spring MVC의 경우 μ‚¬μš©μžλŠ” Accept 헀더λ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜, ν™•μž₯자λ₯Ό 톡해 μ›ν•˜λŠ” μ½˜ν…νŠΈ μœ ν˜•μ„ μ§€μ •ν•˜μ—¬ λ¦¬μ†ŒμŠ€λ₯Ό μ›ν•˜λŠ” λ°©μ‹μœΌλ‘œ 지정할 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ /admin.json으둜 μš”μ²­μ„ 보내 /admin λ¦¬μ†ŒμŠ€λ₯Ό JSON λ¬Έμ„œλ‘œ μš”μ²­ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Ant 경둜 식은 μ½˜ν…νŠΈ ν˜‘μƒ ν™•μž₯을 μ„€λͺ…ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ μš”μ²­μ΄ /admin 식과 μΌμΉ˜ν•˜μ§€ μ•Šκ³  끝점이 λ³΄ν˜Έλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 284
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000213, CCI-001084, CCI-002165
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - General Data Protection Regulation (GDPR) Access Violation
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1), SC-3 Security Function Isolation (P1)
[6] Standards Mapping - NIST Special Publication 800-53 Revision 5 AC-3 Access Enforcement, SC-3 Security Function Isolation
[7] Standards Mapping - OWASP API 2023 API8 Security Misconfiguration
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.4.2 Access Control Architectural Requirements (L2 L3), 1.4.4 Access Control Architectural Requirements (L2 L3)
[9] Standards Mapping - OWASP Mobile 2014 M5 Poor Authorization and Authentication
[10] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[11] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[12] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[13] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[14] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[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.2
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4
[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.8
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.8
[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 5.4 - Authentication and Access Control
[26] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 5.4 - Authentication and Access Control
[27] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 5.4 - Authentication and Access Control, Control Objective C.2.3 - Web Software Access Controls
[28] Standards Mapping - SANS Top 25 2011 Risky Resource Management - CWE ID 676
[29] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[39] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[40] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[41] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[42] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[43] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[44] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[45] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[46] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[52] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
[53] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
desc.config.java.spring_security_misconfiguration_incorrect_request_matcher_type
Abstract
Spring Security κ΅¬μ„±μ—λŠ” μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” μš”μ²­μ— μ μš©ν•  폴백 검사가 μ—†μŠ΅λ‹ˆλ‹€.
Explanation
Spring SecurityλŠ” κ°œλ°œμžκ°€ λͺ¨λ“  μš”μ²­μ— μ μš©ν•΄μ•Ό ν•˜λŠ” 일련의 검사λ₯Ό μ •μ˜ν•  수 μžˆλŠ” 식 기반 access control을 μ‚¬μš©ν•©λ‹ˆλ‹€. access control을 μš”μ²­μ— μ μš©ν•΄μ•Ό ν•˜λŠ”μ§€ κ²°μ •ν•˜κΈ° μœ„ν•΄ Spring SecurityλŠ” λͺ¨λ“  λ³΄μ•ˆ 점검에 λŒ€ν•΄ μ •μ˜λœ μš”μ²­ 선택기와 μš”μ²­μ„ μΌμΉ˜μ‹œν‚΅λ‹ˆλ‹€. μš”μ²­μ΄ μΌμΉ˜ν•˜λ©΄ access control이 μš”μ²­μ— μ μš©λ©λ‹ˆλ‹€. λͺ¨λ“  μš”μ²­κ³Ό 항상 μΌμΉ˜ν•˜λŠ” 특수 μš”μ²­ 선택기가 μ‘΄μž¬ν•©λ‹ˆλ‹€. anyRequest(). anyRequest() 선택기λ₯Ό μ‚¬μš©ν•˜λŠ” 폴백 검사λ₯Ό μ •μ˜ν•˜μ§€ λͺ»ν•˜λ©΄ 끝점이 λ³΄ν˜Έλ˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

예제 1: λ‹€μŒ μ½”λ“œλŠ” 폴백 검사λ₯Ό μ •μ˜ν•˜μ§€ λͺ»ν•˜λŠ” Spring Security ꡬ성을 μ •μ˜ν•©λ‹ˆλ‹€.

<http auto-config="true">
<intercept-url pattern="/app/admin" access="ROLE_ADMIN" />
<intercept-url pattern="/" access="permitAll" />
</http>


μœ„ Example 1μ—μ„œ ν˜„μž¬ λ˜λŠ” 미래의 끝점(예: /admin/panel)이 λ³΄ν˜Έλ˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 284
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000213, CCI-001084, CCI-002165
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - General Data Protection Regulation (GDPR) Access Violation
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1), SC-3 Security Function Isolation (P1)
[6] Standards Mapping - NIST Special Publication 800-53 Revision 5 AC-3 Access Enforcement, SC-3 Security Function Isolation
[7] Standards Mapping - OWASP API 2023 API8 Security Misconfiguration
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.4.2 Access Control Architectural Requirements (L2 L3), 1.4.4 Access Control Architectural Requirements (L2 L3)
[9] Standards Mapping - OWASP Mobile 2014 M5 Poor Authorization and Authentication
[10] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[11] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[12] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[13] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[14] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[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.2
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4
[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.8
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.8
[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 5.4 - Authentication and Access Control
[26] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 5.4 - Authentication and Access Control
[27] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 5.4 - Authentication and Access Control, Control Objective C.2.3 - Web Software Access Controls
[28] Standards Mapping - SANS Top 25 2011 Risky Resource Management - CWE ID 676
[29] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[39] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[40] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[41] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[42] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[43] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[44] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[45] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[46] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[52] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
[53] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
desc.config.java.spring_security_misconfiguration_lack_of_fallback_check
Abstract
Spring Security HTTP 방화벽은 lax μ •μ±…μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.
Explanation
Spring Securityμ—λŠ” 잠재적으둜 μ•…μ˜μ μΈ λ¬Έμžκ°€ ν¬ν•¨λœ μš”μ²­μ„ μ •ν™”ν•˜μ—¬ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•˜λŠ” 데 도움이 λ˜λŠ” HTTP 방화벽이 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. Spring은 HttpFirewall을 FilterChainProxy에 ν¬ν•¨ν•˜μ—¬ ν•΄λ‹Ή μš”μ²­μ„ μ •ν™”ν•  수 있으며, ν•„ν„° 체인을 톡해 μš”μ²­μ„ 보내기 전에 μ²˜λ¦¬ν•©λ‹ˆλ‹€. Spring SecurityλŠ” 기본적으둜 StrictHttpFirewall κ΅¬ν˜„μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.


예제 1: λ‹€μŒ μ½”λ“œλŠ” λ°©ν™”λ²½ 정책을 μ™„ν™”ν•˜μ—¬ %2F 및 ; 문자λ₯Ό ν—ˆμš©ν•©λ‹ˆλ‹€.

<beans:bean id="httpFirewall" class="org.springframework.security.web.firewall.StrictHttpFirewall" p:allowSemicolon="true" p:allowUrlEncodedSlash="true"/>


잠재적으둜 μ•…μ˜μ μΈ 문자λ₯Ό ν—ˆμš©ν•˜λ©΄ μ΄λŸ¬ν•œ λ¬Έμžκ°€ μΌκ΄€λ˜κ²Œ μ²˜λ¦¬λ˜μ§€ μ•Šμ„ 경우 취약점이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ„Έλ―Έμ½œλ‘ μ„ ν—ˆμš©ν•˜λ©΄ nginx와 같은 ν”„λŸ°νŠΈ μ—”λ“œ μ›Ή μ„œλ²„μ™€ Apache Tomcatκ³Ό 같은 μ‘μš© ν”„λ‘œκ·Έλž¨ μ„œλ²„μ—μ„œ μΌκ΄€λ˜κ²Œ μ²˜λ¦¬λ˜μ§€ μ•ŠλŠ” 경둜 맀개 λ³€μˆ˜(RFC 2396에 μ •μ˜)λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ λΆˆμΌμΉ˜λŠ” Path Traversal κ³΅κ²©μ΄λ‚˜ access control이 λ¬΄μ‹œλ  수 μžˆμŠ΅λ‹ˆλ‹€.
References
[1] Class DefaultHttpFirewall Spring
[2] Standards Mapping - FIPS200 CM
[3] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 CM-6 Configuration Settings (P1)
[5] Standards Mapping - NIST Special Publication 800-53 Revision 5 CM-6 Configuration Settings
[6] Standards Mapping - OWASP API 2023 API8 Security Misconfiguration
[7] Standards Mapping - OWASP Mobile 2014 M1 Weak Server Side Controls
[8] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[9] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[12] Standards Mapping - OWASP Top 10 2021 A05 Security Misconfiguration
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.4.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.4.1
[16] Standards Mapping - Web Application Security Consortium Version 2.00 Server Misconfiguration (WASC-14)
desc.config.java.spring_security_misconfiguration_overly_permissive_firewall_policy
Abstract
직접 Open SQL μ“°κΈ° μž‘μ—…μ€ 잘λͺ»λœ 관행이며 ν”Όν•΄μ•Ό ν•©λ‹ˆλ‹€.
Explanation
직접 Open SQL μ“°κΈ° μž‘μ—…(μ‚½μž…/μ—…λ°μ΄νŠΈ/μˆ˜μ •/μ‚­μ œ)은 일반적으둜 잘λͺ»λœ 관행이며 ν”Όν•΄μ•Ό ν•©λ‹ˆλ‹€. 이 μ—…λ°μ΄νŠΈλŠ” μ‹œμŠ€ν…œμ˜ 무결성과 λ³΄μ•ˆμ„ μ•½ν™”μ‹œν‚€λ―€λ‘œ ν—ˆμš©ν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.



직접 Open SQL μ“°κΈ° μž‘μ—…μ€ 였λ₯˜κ°€ λ°œμƒν•˜κΈ° 쉽고 예기치 μ•Šμ€ μ‹œμŠ€ν…œ λ™μž‘μ„ μœ λ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ SAPμ—μ„œ μ£Όμ˜ν•΄μ•Ό ν•˜λŠ” λͺ‡ 가지 λ¬Έμ œμž…λ‹ˆλ‹€.

- 'update bundling' κΈ°μˆ μ„ μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ λ°μ΄ν„°λ² μ΄μŠ€ LUW에 걸쳐 μžˆμ„ 수 μžˆλŠ” SAP LUW(Logical Unit of Work: μž‘μ—… 논리 λ‹¨μœ„) λ‚΄μ—μ„œ 데이터 무결성을 보μž₯ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 'update bundling' 없이 ν…Œμ΄λΈ” ν•­λͺ©μ„ 직접 μˆ˜μ •ν•˜λ©΄ SAP νŠΈλžœμž­μ…˜μ„ λΆˆμ•ˆμ •ν•œ μƒνƒœμ— 빠뜨릴 수 μžˆμŠ΅λ‹ˆλ‹€.

- 직접 Open SQL μ“°κΈ° μž‘μ—…μ€ λ°μ΄ν„°λ² μ΄μŠ€ μˆ˜μ€€ μž κΈˆμ„ μ„€μ •ν•΄μ•Ό ν•˜λ©°, SAP μ‘μš© ν”„λ‘œκ·Έλž¨ μž κΈˆμ€ λ¬΄μ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€. 이 κ²½μš°μ— 데이터 ꡐ착 및 손상을 μΌμœΌν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

- 직접 Open SQL μ“°κΈ° μž‘μ—…μ€ μ‘μš© ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ SAP κΆŒν•œ λΆ€μ—¬ 검사λ₯Ό λ¬΄μ‹œν•©λ‹ˆλ‹€.

- ν…Œμ΄λΈ” ν•­λͺ© μ“°κΈ°, 검사 νŽΈμ§‘, 감사 좔적 등에 ν‘œμ€€ λ©”μ»€λ‹ˆμ¦˜μ΄ μ‚¬μš©λ˜λ©΄ 그에 μ’…μ†λ˜λŠ” μ—…λ°μ΄νŠΈ(예: λ¬Έμ„œ λ³€κ²½ λ“±)κ°€ λͺ¨λ‘ μ˜¬λ°”λ₯΄κ²Œ μˆ˜ν–‰λ©λ‹ˆλ‹€. μ΄λŠ” 직접 Open SQL μ“°κΈ° μž‘μ—…μ„ μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λŠ” ν•΄λ‹Ήλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 662
[2] Standards Mapping - Common Weakness Enumeration Top 25 2022 [22] CWE ID 362
[3] Standards Mapping - Common Weakness Enumeration Top 25 2023 [21] CWE ID 362
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002235
[5] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-6 Least Privilege (P1)
[7] Standards Mapping - NIST Special Publication 800-53 Revision 5 AC-6 Least Privilege
[8] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-000500 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-000500 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-000500 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-000500 CAT II
desc.structural.abap.sql_bad_practices_direct_update
Abstract
μŠ€ν‚€λ§ˆκ°€ μ—†λŠ” μ‹λ³„μžλŠ” 호좜자의 κΆŒν•œ νŒ¨ν‚€μ§€μ— μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.
Explanation
호좜자의 κΆŒν•œ λ˜λŠ” AUTHID CURRENT_USER νŒ¨ν‚€μ§€μ—μ„œ μ‹λ³„μžλŠ” λ¨Όμ € ν˜„μž¬ μ‚¬μš©μžμ˜ μŠ€ν‚€λ§ˆμ— λŒ€ν•΄ ν™•μΈλ©λ‹ˆλ‹€. 그러면 μ‹λ³„μžκ°€ 속해 μžˆλŠ” μŠ€ν‚€λ§ˆλ₯Ό μ½”λ“œμ˜ μ •μ˜μžκ°€ λͺ…μ‹œμ μœΌλ‘œ λ°νžˆμ§€ μ•ŠλŠ” 경우 예기치 λͺ»ν•œ λ™μž‘μ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예제 1: λ‹€μŒ μ½”λ“œλŠ” κΆŒν•œ ν‘œμ—μ„œ μ‚¬μš©μžλ₯Ό μ‘°νšŒν•˜μ—¬ μ‚¬μš©μžμ—κ²Œ μž‘μ—…μ„ μˆ˜ν–‰ν•  κΆŒν•œμ΄ μžˆλŠ”μ§€ κ²€μ‚¬ν•©λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ μ‚¬μš©μžλŠ” SYS.PERMISSIONS에 λŒ€ν•œ 읽기 κΆŒν•œλ§Œ 있으며 μ •μ˜λœ κΆŒν•œμ„ μˆ˜μ •ν•  수 μ—†μŠ΅λ‹ˆλ‹€.


CREATE or REPLACE FUNCTION check_permissions(
p_name IN VARCHAR2, p_action IN VARCHAR2)
RETURN BOOLEAN
AUTHID CURRENT_USER
IS
r_count NUMBER;
perm BOOLEAN := FALSE;
BEGIN
SELECT count(*) INTO r_count FROM PERMISSIONS
WHERE name = p_name AND action = p_action;
IF r_count > 0 THEN
perm := TRUE;
END IF;
RETURN perm;
END check_permissions
check_permissions ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” μ‚¬μš©μžκ°€ ν•΄λ‹Ή μŠ€ν‚€λ§ˆμ—μ„œ PERMISSIONS ν…Œμ΄λΈ”μ„ μ •μ˜ν•˜λŠ” 경우, λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ‹λ³„μžλŠ” 둜컬 ν…Œμ΄λΈ”μ„ μ°Έμ‘°ν•©λ‹ˆλ‹€. μ‚¬μš©μžλŠ” μƒˆ ν…Œμ΄λΈ”μ— λŒ€ν•œ μ“°κΈ° κΆŒν•œμ΄ 있으며 μ›λž˜λŠ” μ—†λ˜ κΆŒν•œμ„ 얻도둝 μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
References
[1] Oracle Oracle Database PL/SQL Language Reference
[2] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
desc.structural.sql.sql_bad_practices_underspecified_identifier
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.

2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.
예제 1: λ‹€μŒ μ½”λ“œλŠ” μ‚¬μš©μžμ—κ²Œ μ†ν•œ 솑μž₯을 κ²€μƒ‰ν•˜κΈ° μœ„ν•œ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ κ΅¬μ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ‚¬μš©μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 같은 ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
v_account = request->get_form_field( 'account' ).
v_reference = request->get_form_field( 'ref_key' ).

CONCATENATE `user = '` sy-uname `'` INTO cl_where.
IF v_account IS NOT INITIAL.
CONCATENATE cl_where ` AND account = ` v_account INTO cl_where SEPARATED BY SPACE.
ENDIF.
IF v_reference IS NOT INITIAL.
CONCATENATE cl_where "AND ref_key = `" v_reference "`" INTO cl_where.
ENDIF.

SELECT *
FROM invoice_items
INTO CORRESPONDING FIELDS OF TABLE itab_items
WHERE (cl_where).
...


이 μ½”λ“œμ˜ μΏΌλ¦¬λŠ” λ‹€μŒμ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•œ κ²ƒμž…λ‹ˆλ‹€(v_account 및 v_referenceκ°€ 곡백이 μ•„λ‹Œ 경우).


SELECT *
FROM invoice_items
INTO CORRESPONDING FIELDS OF TABLE itab_items
WHERE user = sy-uname
AND account = <account>
AND ref_key = <reference>.


ν•˜μ§€λ§Œ μΏΌλ¦¬λŠ” μƒμˆ˜ 기반 쿼리 λ¬Έμžμ—΄ 및 μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ— μ˜ν•΄ λ™μ μœΌλ‘œ μƒμ„±λ˜λ―€λ‘œ SQL injection 곡격의 λŒ€μƒμ΄ λ©λ‹ˆλ‹€. κ³΅κ²©μžκ°€ v_reference에 "abc` OR MANDT NE `+" λ¬Έμžμ—΄μ„ μž…λ ₯ν•˜κ³  v_account에 '1000' λ¬Έμžμ—΄μ„ μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.


SELECT *
FROM invoice_items
INTO CORRESPONDING FIELDS OF TABLE itab_items
WHERE user = sy-uname
AND account = 1000
AND ref_key = `abc` OR MANDT NE `+`.
OR MANDT NE `+` 쑰건을 μΆ”κ°€ν•¨μœΌλ‘œμ¨ ν΄λΌμ΄μ–ΈνŠΈ ν•„λ“œλŠ” λ¦¬ν„°λŸ΄ +와 동일할 수 μ—†μœΌλ―€λ‘œ WHERE 절이 항상 trueκ°€ λ©λ‹ˆλ‹€. λ”°λΌμ„œ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 훨씬 λ‹¨μˆœν•œ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM invoice_items
INTO CORRESPONDING FIELDS OF TABLE itab_items.


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ‚¬μš©μžμ™€ 관계없이 invoice_items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 예λ₯Ό 톡해 직원듀이 μžμ‹ μ˜ μ£Όμ†Œλ₯Ό μ—…λ°μ΄νŠΈν•  수 μžˆλ„λ‘ ν•˜λŠ” ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œμ˜ ADBC API μ‚¬μš©μ„ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.


PARAMETERS: p_street TYPE string,
p_city TYPE string.

Data: v_sql TYPE string,
stmt TYPE REF TO CL_SQL_STATEMENT.

v_sql = "UPDATE EMP_TABLE SET ".

"Update employee address. Build the update statement with changed details
IF street NE p_street.
CONCATENATE v_sql "STREET = `" p_street "`".
ENDIF.
IF city NE p_city.
CONCATENATE v_sql "CITY = `" p_city "`".
ENDIF.

l_upd = stmt->execute_update( v_sql ).



μ–΄λ–€ 뢈만이 λ§Žμ€ 직원이 p_street 맀개 λ³€μˆ˜μ— "ABC` SALARY = `1000000" 같은 λ¬Έμžμ—΄μ„ μž…λ ₯ν•œλ‹€λ©΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ€ λ³€κ²½λœ μ›”κΈ‰μœΌλ‘œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ—…λ°μ΄νŠΈν•˜λ„λ‘ ν—ˆμš©ν•©λ‹ˆλ‹€.

SQL injection 곡격을 μ˜ˆλ°©ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ κ²€μ‚¬λŠ” μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

References
[1] SAP OSS notes 1520356, 1487337, 1502272 and related notes.
[2] S. J. Friedl SQL Injection Attacks by Example
[3] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[4] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[5] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[6] Standards Mapping - Common Weakness Enumeration CWE ID 89
[7] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[8] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[12] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[13] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[14] Standards Mapping - FIPS200 SI
[15] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[16] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[17] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Directive 4.14, Rule 1.3
[18] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 0-3-1
[19] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
[20] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[21] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[22] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[23] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[24] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[25] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[26] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[27] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[28] Standards Mapping - OWASP Top 10 2010 A1 Injection
[29] Standards Mapping - OWASP Top 10 2013 A1 Injection
[30] Standards Mapping - OWASP Top 10 2017 A1 Injection
[31] Standards Mapping - OWASP Top 10 2021 A03 Injection
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[38] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[39] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[40] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[41] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[42] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[43] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[44] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[45] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[46] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[47] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[54] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[68] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[69] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[70] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[71] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.abap.sql_injection
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.



2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.

예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •λœ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜λŠ” SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
var params:Object = LoaderInfo(this.root.loaderInfo).parameters;
var username:String = String(params["username"]);
var itemName:String = String(params["itemName"]);
var query:String = "SELECT * FROM items WHERE owner = " + username + " AND itemname = " + itemName;

stmt.sqlConnection = conn;
stmt.text = query;
stmt.execute();
...


μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€ν•˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 κ°„λ‹¨ν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'; DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ κ²€μ‚¬λŠ” μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν’€μ΄ν•˜μ§€λ§Œ, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] Standards Mapping - Common Weakness Enumeration CWE ID 89
[6] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[7] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[8] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[12] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[13] Standards Mapping - FIPS200 SI
[14] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[15] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[16] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Directive 4.14, Rule 1.3
[17] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 0-3-1
[18] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
[19] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[20] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[21] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[22] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[23] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[24] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[25] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[26] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[27] Standards Mapping - OWASP Top 10 2010 A1 Injection
[28] Standards Mapping - OWASP Top 10 2013 A1 Injection
[29] Standards Mapping - OWASP Top 10 2017 A1 Injection
[30] Standards Mapping - OWASP Top 10 2021 A03 Injection
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[38] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[39] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[40] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[41] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[42] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[43] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[44] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[45] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[46] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[68] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[69] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[70] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.actionscript.sql_injection
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.

2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.
예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •λœ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜λŠ” SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 ownerκ°€ μΌμΉ˜ν•˜λŠ” ν•­λͺ©λ§Œ ν‘œμ‹œν•˜λ„λ‘ μ œν•œν•©λ‹ˆλ‹€.


...
string userName = ctx.getAuthenticatedUserName();
string query = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ ItemName.Text + "'";
sda = new SqlDataAdapter(query, conn);
DataTable dt = new DataTable();
sda.Fill(dt);
...


μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€ν•˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 κ°„λ‹¨ν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'); DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ κ²€μ‚¬λŠ” μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν’€μ΄ν•˜μ§€λ§Œ, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] Standards Mapping - Common Weakness Enumeration CWE ID 89
[6] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[7] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[8] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[12] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[13] Standards Mapping - FIPS200 SI
[14] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[15] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[16] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Directive 4.14, Rule 1.3
[17] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 0-3-1
[18] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
[19] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[20] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[21] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[22] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[23] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[24] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[25] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[26] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[27] Standards Mapping - OWASP Top 10 2010 A1 Injection
[28] Standards Mapping - OWASP Top 10 2013 A1 Injection
[29] Standards Mapping - OWASP Top 10 2017 A1 Injection
[30] Standards Mapping - OWASP Top 10 2021 A03 Injection
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[38] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[39] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[40] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[41] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[42] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[43] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[44] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[45] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[46] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[68] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[69] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[70] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.dotnet.sql_injection
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.

2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.
예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •λœ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜λŠ” SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
ctx.getAuthUserName(&userName); {
CString query = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ request.Lookup("item") + "'";
dbms.ExecuteSQL(query);
...
예제 2:SQLiteμ—μ„œ λ‹€μŒ μ½”λ“œλ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λ„ μœ μ‚¬ν•œ κ²°κ³Όλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.


...
sprintf (sql, "SELECT * FROM items WHERE owner='%s' AND itemname='%s'", username, request.Lookup("item"));
printf("SQL to execute is: \n\t\t %s\n", sql);
rc = sqlite3_exec(db,sql, NULL,0, &err);
...


μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€ν•˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 κ°„λ‹¨ν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 3: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'); DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ κ²€μ‚¬λŠ” μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν’€μ΄ν•˜μ§€λ§Œ, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] Parameterized CRecordset and CDatabase for SQL Server
[6] Parameterizing a Recordset Microsoft
[7] ODBC API Reference: SQLNumParams() Microsoft
[8] ODBC API Reference: SQLBindParameter() Microsoft
[9] OLE DB Reference: ICommandWithParameters Microsoft
[10] Standards Mapping - Common Weakness Enumeration CWE ID 89
[11] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[12] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[13] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[14] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[15] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[16] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[17] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[18] Standards Mapping - FIPS200 SI
[19] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[20] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[21] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Directive 4.14, Rule 1.3
[22] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 0-3-1
[23] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
[24] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[25] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[26] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[27] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[28] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[29] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[30] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[31] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[32] Standards Mapping - OWASP Top 10 2010 A1 Injection
[33] Standards Mapping - OWASP Top 10 2013 A1 Injection
[34] Standards Mapping - OWASP Top 10 2017 A1 Injection
[35] Standards Mapping - OWASP Top 10 2021 A03 Injection
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[38] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[39] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[40] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[41] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[42] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[43] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[44] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[45] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[46] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[47] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[48] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[49] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[50] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[51] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[54] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[55] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[56] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[57] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[58] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[68] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[69] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[70] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[71] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[72] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[73] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[74] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[75] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.cpp.sql_injection
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.

2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.
예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •λœ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜λ„λ‘ μ„€κ³„λœ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 같은 ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
ACCEPT USER.
ACCEPT ITM.
MOVE "SELECT * FROM items WHERE owner = '" TO QUERY1.
MOVE "' AND itemname = '" TO QUERY2.
MOVE "'" TO QUERY3.

STRING
QUERY1, USER, QUERY2, ITM, QUERY3 DELIMITED BY SIZE
INTO QUERY
END-STRING.

EXEC SQL
EXECUTE IMMEDIATE :QUERY
END-EXEC.
...


이 μ½”λ“œκ°€ μ‹€ν–‰ν•˜λ €λŠ” μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itm에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€ν•˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 κ°„λ‹¨ν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œμ—μ„œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'; DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 이λ₯Ό μ§€μ›ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 ν‘œμ‹œλ₯Ό μ‚¬μš©ν•˜μ—¬ μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL injection 곡격을 μ˜ˆλ°©ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ κ²€μ‚¬λŠ” μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν’€μ΄ν•˜μ§€λ§Œ, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] Standards Mapping - Common Weakness Enumeration CWE ID 89
[6] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[7] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[8] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[12] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[13] Standards Mapping - FIPS200 SI
[14] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[15] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[16] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Directive 4.14, Rule 1.3
[17] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 0-3-1
[18] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
[19] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[20] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[21] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[22] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[23] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[24] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[25] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[26] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[27] Standards Mapping - OWASP Top 10 2010 A1 Injection
[28] Standards Mapping - OWASP Top 10 2013 A1 Injection
[29] Standards Mapping - OWASP Top 10 2017 A1 Injection
[30] Standards Mapping - OWASP Top 10 2021 A03 Injection
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[38] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[39] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[40] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[41] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[42] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[43] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[44] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[45] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[46] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[68] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[69] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[70] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.cobol.sql_injection
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.

2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.
예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •λœ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜λŠ” SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
<cfquery name="matchingItems" datasource="cfsnippets">
SELECT * FROM items
WHERE owner='#Form.userName#'
AND itemId=#Form.ID#
</cfquery>
...


μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemId = <ID>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” Form.ID에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ Form.ID에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemId = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€ν•˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 κ°„λ‹¨ν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 hacker인 κ³΅κ²©μžκ°€ Form.ID에 λ¬Έμžμ—΄ "hacker'); DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'hacker'
AND itemId = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'hacker'
AND itemId = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ κ²€μ‚¬λŠ” μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν’€μ΄ν•˜μ§€λ§Œ, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] Standards Mapping - Common Weakness Enumeration CWE ID 89
[6] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[7] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[8] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[12] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[13] Standards Mapping - FIPS200 SI
[14] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[15] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[16] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Directive 4.14, Rule 1.3
[17] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 0-3-1
[18] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
[19] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[20] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[21] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[22] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[23] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[24] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[25] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[26] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[27] Standards Mapping - OWASP Top 10 2010 A1 Injection
[28] Standards Mapping - OWASP Top 10 2013 A1 Injection
[29] Standards Mapping - OWASP Top 10 2017 A1 Injection
[30] Standards Mapping - OWASP Top 10 2021 A03 Injection
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[38] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[39] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[40] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[41] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[42] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[43] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[44] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[45] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[46] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[68] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[69] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[70] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.cfml.sql_injection
Abstract
Java J2EE PersistenceAPIλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ˜ μž…λ ₯으둜 μž‘μ„±λœ 동적 SQL 문을 μ‹€ν–‰ν•˜λŠ” 경우 κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL Injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ˜ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.



2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.

예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •ν•œ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜κΈ° μœ„ν•œ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
final server = await HttpServer.bind('localhost', 18081);
server.listen((request) async {
final headers = request.headers;
final userName = headers.value('userName');
final itemName = headers.value('itemName');
final query = "SELECT * FROM items WHERE owner = '"
+ userName! + "' AND itemname = '"
+ itemName! + "'";
db.query(query);
}
...


이 μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ name' OR 'a'='aλ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€λ˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 λ‹¨μˆœν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'; DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’μ˜ ν—ˆμš© λͺ©λ‘μ˜ 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘μ„ ν™•μΈν•˜λŠ” 것은 μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘μ„ κ΅¬ν˜„ν•˜λŠ” 것은 SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같은 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL Injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL Injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL Injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ 말해, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ μ•…μš©μ€ 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL Injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 89
[2] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[3] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[4] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[5] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[6] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[7] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[8] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[9] Standards Mapping - FIPS200 SI
[10] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[11] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[12] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Directive 4.14, Rule 1.3
[13] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 0-3-1
[14] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
[15] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[16] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[17] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[18] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[19] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[20] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[21] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[22] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[23] Standards Mapping - OWASP Top 10 2010 A1 Injection
[24] Standards Mapping - OWASP Top 10 2013 A1 Injection
[25] Standards Mapping - OWASP Top 10 2017 A1 Injection
[26] Standards Mapping - OWASP Top 10 2021 A03 Injection
[27] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[28] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[29] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[30] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[36] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[37] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[38] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[39] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[40] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[41] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[42] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[43] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[44] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[45] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[46] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[50] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[51] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[52] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[53] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[66] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.dart.sql_injection
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL Injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ˜ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.

2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.
예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •ν•œ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜κΈ° μœ„ν•œ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
rawQuery := request.URL.Query()
username := rawQuery.Get("userName")
itemName := rawQuery.Get("itemName")
query := "SELECT * FROM items WHERE owner = " + username + " AND itemname = " + itemName + ";"

db.Exec(query)
...


이 μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ name' OR 'a'='aλ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€λ˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 λ‹¨μˆœν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'; DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ λ™μ‹œμ— μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€. [4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'; DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ κ²€μ‚¬λŠ” μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL Injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL Injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL Injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ 말해, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL Injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] Standards Mapping - Common Weakness Enumeration CWE ID 89
[6] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[7] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[8] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[12] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[13] Standards Mapping - FIPS200 SI
[14] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[15] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[16] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Directive 4.14, Rule 1.3
[17] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 0-3-1
[18] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
[19] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[20] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[21] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[22] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[23] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[24] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[25] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[26] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[27] Standards Mapping - OWASP Top 10 2010 A1 Injection
[28] Standards Mapping - OWASP Top 10 2013 A1 Injection
[29] Standards Mapping - OWASP Top 10 2017 A1 Injection
[30] Standards Mapping - OWASP Top 10 2021 A03 Injection
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[38] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[39] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[40] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[41] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[42] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[43] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[44] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[45] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[46] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[68] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[69] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[70] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.golang.sql_injection
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.



2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.

예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •λœ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜λŠ” SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
String userName = ctx.getAuthenticatedUserName();
String itemName = request.getParameter("itemName");
String query = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ itemName + "'";
ResultSet rs = stmt.execute(query);
...


μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€ν•˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 κ°„λ‹¨ν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'; DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


λͺ¨λ°”일 ν™˜κ²½μ—μ„œλŠ” SQL Injectionκ³Ό 같은 μ „ν˜•μ μΈ μ›Ή μ‘μš© ν”„λ‘œκ·Έλž¨ 취약성이 λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€κ³  μƒκ°ν•˜λŠ” μ‚¬μš©μžλ„ μžˆμŠ΅λ‹ˆλ‹€. 자기 μžμ‹ μ„ κ³΅κ²©ν•˜λŠ” μ‚¬μš©μžλŠ” 없을 것이라 μ—¬κΈ°κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λͺ¨λ°”일 ν”Œλž«νΌμ˜ 핡심 μš”μ†ŒλŠ” λ‹€μ–‘ν•œ μ†ŒμŠ€μ—μ„œ λ‹€μš΄λ‘œλ“œλ˜μ–΄ 같은 μž₯μΉ˜μ—μ„œ ν•¨κ»˜ μ‹€ν–‰λ˜λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨μ΄λΌλŠ” 점을 μœ λ…ν•΄μ•Ό ν•©λ‹ˆλ‹€. 즉 금육 μ‘μš© ν”„λ‘œκ·Έλž¨κ³Ό 맬웨어λ₯Ό ν•¨κ»˜ μ‹€ν–‰ν•  κ°€λŠ₯성이 λ†’μœΌλ―€λ‘œ ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신을 ν¬ν•¨ν•˜λ„λ‘ λͺ¨λ°”일 μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ 곡격 ν‘œλ©΄μ„ ν™•μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.

예제 3: λ‹€μŒ μ½”λ“œλŠ” Example 1을 Android ν”Œλž«νΌμ— 맞게 μ‘°μ •ν•©λ‹ˆλ‹€.


...
PasswordAuthentication pa = authenticator.getPasswordAuthentication();
String userName = pa.getUserName();
String itemName = this.getIntent().getExtras().getString("itemName");
String query = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ itemName + "'";
SQLiteDatabase db = this.openOrCreateDatabase("DB", MODE_PRIVATE, null);
Cursor c = db.rawQuery(query, null);
...


SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ κ²€μ‚¬λŠ” μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν’€μ΄ν•˜μ§€λ§Œ, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] IDS00-J. Prevent SQL Injection CERT
[6] INJECT-2: Avoid dynamic SQL Oracle
[7] Standards Mapping - Common Weakness Enumeration CWE ID 89
[8] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[12] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[13] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[14] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[15] Standards Mapping - FIPS200 SI
[16] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[17] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[18] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Directive 4.14, Rule 1.3
[19] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 0-3-1
[20] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
[21] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[22] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[23] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[24] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[25] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[26] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[27] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[28] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[29] Standards Mapping - OWASP Top 10 2010 A1 Injection
[30] Standards Mapping - OWASP Top 10 2013 A1 Injection
[31] Standards Mapping - OWASP Top 10 2017 A1 Injection
[32] Standards Mapping - OWASP Top 10 2021 A03 Injection
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[38] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[39] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[40] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[41] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[42] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[43] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[44] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[45] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[46] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[47] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[48] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[54] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[55] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[68] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[69] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[70] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[71] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[72] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.java.sql_injection
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.



2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.

예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •λœ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜λŠ” SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
var username = document.form.username.value;
var itemName = document.form.itemName.value;
var query = "SELECT * FROM items WHERE owner = " + username + " AND itemname = " + itemName + ";";
db.transaction(function (tx) {
tx.executeSql(query);
}
)
...


μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€ν•˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 κ°„λ‹¨ν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'; DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ κ²€μ‚¬λŠ” μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν’€μ΄ν•˜μ§€λ§Œ, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] Standards Mapping - Common Weakness Enumeration CWE ID 89
[6] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[7] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[8] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[12] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[13] Standards Mapping - FIPS200 SI
[14] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[15] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[16] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Directive 4.14, Rule 1.3
[17] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 0-3-1
[18] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
[19] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[20] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[21] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[22] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[23] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[24] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[25] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[26] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[27] Standards Mapping - OWASP Top 10 2010 A1 Injection
[28] Standards Mapping - OWASP Top 10 2013 A1 Injection
[29] Standards Mapping - OWASP Top 10 2017 A1 Injection
[30] Standards Mapping - OWASP Top 10 2021 A03 Injection
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[38] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[39] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[40] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[41] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[42] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[43] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[44] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[45] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[46] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[68] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[69] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[70] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.javascript.sql_injection
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.



2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.

예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •λœ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜λŠ” SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
$userName = $_SESSION['userName'];
$itemName = $_POST['itemName'];
$query = "SELECT * FROM items WHERE owner = '$userName' AND itemname = '$itemName';";
$result = mysql_query($query);
...


μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ κ΅¬μ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€ν•˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 κ°„λ‹¨ν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'; DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ κ²€μ‚¬λŠ” μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν’€μ΄ν•˜μ§€λ§Œ, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] Standards Mapping - Common Weakness Enumeration CWE ID 89
[6] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[7] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[8] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[12] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[13] Standards Mapping - FIPS200 SI
[14] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[15] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[16] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Directive 4.14, Rule 1.3
[17] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 0-3-1
[18] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
[19] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[20] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[21] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[22] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[23] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[24] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[25] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[26] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[27] Standards Mapping - OWASP Top 10 2010 A1 Injection
[28] Standards Mapping - OWASP Top 10 2013 A1 Injection
[29] Standards Mapping - OWASP Top 10 2017 A1 Injection
[30] Standards Mapping - OWASP Top 10 2021 A03 Injection
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[38] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[39] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[40] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[41] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[42] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[43] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[44] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[45] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[46] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[68] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[69] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[70] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.php.sql_injection
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.

2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.
예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •ν•œ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜κΈ° μœ„ν•œ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 같은 ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


procedure get_item (
itm_cv IN OUT ItmCurTyp,
usr in varchar2,
itm in varchar2)
is
open itm_cv for ' SELECT * FROM items WHERE ' ||
'owner = '''|| usr || '''' ||
' AND itemname = ''' || itm || '''';
end get_item;


이 μ½”λ“œκ°€ μ‹€ν–‰ν•˜λ €λŠ” μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itm에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€ν•˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 κ°„λ‹¨ν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œμ—μ„œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'; DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 이λ₯Ό μ§€μ›ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 ν‘œμ‹œλ₯Ό μ‚¬μš©ν•˜μ—¬ μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL injection 곡격을 μ˜ˆλ°©ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ κ²€μ‚¬λŠ” μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ΄μƒμ˜ μ˜ˆμ œμ—μ„œ 보듯이 μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)도 λ‹€λ₯Έ μ½”λ“œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ μ·¨μ•½ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λŠ” 일정 μœ ν˜•μ˜ μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ›μ²œμ μœΌλ‘œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] David Litchfield Lateral SQL Injection: A New Class of Vulnerability in Oracle
[6] Standards Mapping - Common Weakness Enumeration CWE ID 89
[7] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[8] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[12] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[13] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[14] Standards Mapping - FIPS200 SI
[15] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[16] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[17] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Directive 4.14, Rule 1.3
[18] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 0-3-1
[19] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
[20] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[21] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[22] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[23] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[24] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[25] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[26] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[27] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[28] Standards Mapping - OWASP Top 10 2010 A1 Injection
[29] Standards Mapping - OWASP Top 10 2013 A1 Injection
[30] Standards Mapping - OWASP Top 10 2017 A1 Injection
[31] Standards Mapping - OWASP Top 10 2021 A03 Injection
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[38] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[39] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[40] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[41] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[42] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[43] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[44] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[45] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[46] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[47] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[54] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[68] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[69] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[70] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[71] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.sql.sql_injection
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.



2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.

예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •λœ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜λŠ” SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
userName = req.field('userName')
itemName = req.field('itemName')
query = "SELECT * FROM items WHERE owner = ' " + userName +" ' AND itemname = ' " + itemName +"';"
cursor.execute(query)
result = cursor.fetchall()
...


μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ κ΅¬μ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€ν•˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 κ°„λ‹¨ν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'; DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ κ²€μ‚¬λŠ” μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν’€μ΄ν•˜μ§€λ§Œ, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] Standards Mapping - Common Weakness Enumeration CWE ID 89
[6] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[7] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[8] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[12] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[13] Standards Mapping - FIPS200 SI
[14] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[15] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[16] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Directive 4.14, Rule 1.3
[17] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 0-3-1
[18] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
[19] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[20] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[21] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[22] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[23] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[24] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[25] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[26] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[27] Standards Mapping - OWASP Top 10 2010 A1 Injection
[28] Standards Mapping - OWASP Top 10 2013 A1 Injection
[29] Standards Mapping - OWASP Top 10 2017 A1 Injection
[30] Standards Mapping - OWASP Top 10 2021 A03 Injection
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[38] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[39] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[40] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[41] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[42] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[43] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[44] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[45] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[46] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[68] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[69] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[70] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.python.sql_injection
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.

이런 경우, Fortify Static Code AnalyzerλŠ” 데이터 μ†ŒμŠ€λ₯Ό μ‹ λ’°ν•  수 μžˆλŠ” κ²ƒμœΌλ‘œ νŒλ‹¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.

예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •λœ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜λŠ” SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
userName = getAuthenticatedUserName()
itemName = params[:itemName]
sqlQuery = "SELECT * FROM items WHERE owner = '#{userName}' AND itemname = '#{itemName}'"
rs = conn.query(sqlQuery)
...


μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€ν•˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 κ°„λ‹¨ν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

RubyλŠ” μ •μ μœΌλ‘œ μœ ν˜• μ§€μ •λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 사싀 λ•Œλ¬Έμ— μ •μ μœΌλ‘œ μœ ν˜• μ§€μ •λ˜λŠ” μ–Έμ–΄μ—μ„œλŠ” μ‚¬μš©ν•˜μ§€ λͺ»ν•  수 μžˆλŠ” λ‹€λ₯Έ SQL 쿼리 μ‚½μž… 지점이 μ‚¬μš© κ°€λŠ₯ν•΄μ§ˆ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
예제 2: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •λœ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜λŠ” SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
id = params[:id]
itemName = Mysql.escape_string(params[:itemName])
sqlQuery = "SELECT * FROM items WHERE id = #{userName} AND itemname = '#{itemName}'"
rs = conn.query(sqlQuery)
...


이 경우, 싀행될 κ²ƒμœΌλ‘œ μ˜ˆμƒλ˜λŠ” SQL μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.


SELECT * FROM items WHERE id=<id> AND itemname = <itemName>;

μ—¬κΈ°μ—μ„œλŠ” κ³΅κ²©μžμ— λŒ€λΉ„ν•˜μ—¬ itemName 내뢀에 단일 μΈμš©μ„ μ§€μ •ν•˜μ—¬ SQL injection 취약점을 λ°©μ§€ν•œ 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ RubyλŠ” μ •μ μœΌλ‘œ μœ ν˜• μ§€μ •λ˜λŠ” μ–Έμ–΄κ°€ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ—, idκ°€ λͺ‡ 가지 λ³€ν˜•μ„ κ°€μ§€λŠ” μ •μˆ˜μΌ κ²ƒμœΌλ‘œ μ˜ˆμƒν•˜λ”λΌλ„ μ‚¬μš©μž μž…λ ₯μ—μ„œ 할당될 λ•Œ μˆ«μžλΌλŠ” 보μž₯이 μ—†μŠ΅λ‹ˆλ‹€. idκ°€ μ‹€μ œλ‘œ μˆ«μžμΈμ§€ κ²€μ‚¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— κ³΅κ²©μžκ°€ id 값을 1 OR id!=1--둜 λ³€κ²½ν•  수 μžˆλ‹€λ©΄ 이제 SQL μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 λ©λ‹ˆλ‹€.


SELECT * FROM items WHERE id=1 OR id!=1-- AND itemname = 'anyValue';


λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 λ•Œλ¬Έμ— 이제 λ‹€μŒμœΌλ‘œ κ΅¬μ„±λœ SQL 쿼리λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.


SELECT * FROM items WHERE id=1 OR id!=1;


이제 ν•΄λ‹Ή ν…Œμ΄λΈ”μ—μ„œ id의 값이 1μ΄κ±°λ‚˜ 1이 μ•„λ‹Œ λͺ¨λ“  것을 μ„ νƒν•˜λŠ”λ° μ΄λŠ” λ‹Ήμ—°νžˆ ν…Œμ΄λΈ” λ‚΄μ˜ λͺ¨λ“  것에 ν•΄λ‹Ήν•©λ‹ˆλ‹€.

λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ κ²€μ‚¬λŠ” μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν’€μ΄ν•˜μ§€λ§Œ, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] Standards Mapping - Common Weakness Enumeration CWE ID 89
[6] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[7] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[8] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[12] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[13] Standards Mapping - FIPS200 SI
[14] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[15] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[16] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Directive 4.14, Rule 1.3
[17] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 0-3-1
[18] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
[19] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[20] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[21] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[22] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[23] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[24] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[25] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[26] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[27] Standards Mapping - OWASP Top 10 2010 A1 Injection
[28] Standards Mapping - OWASP Top 10 2013 A1 Injection
[29] Standards Mapping - OWASP Top 10 2017 A1 Injection
[30] Standards Mapping - OWASP Top 10 2021 A03 Injection
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[38] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[39] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[40] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[41] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[42] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[43] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[44] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[45] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[46] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[68] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[69] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[70] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.ruby.sql_injection
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL Injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.



2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.

예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •ν•œ 이름과 μΌμΉ˜ν•˜λŠ” μ‚¬μš©μžλ₯Ό κ²€μƒ‰ν•˜κΈ° μœ„ν•œ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. 이 μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ 경둜 맀개 λ³€μˆ˜λ‘œ 제곡된 μ‚¬μš©μž 이름과 μΌμΉ˜ν•˜λŠ” μ†Œμœ μžμ˜ ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


def doSQLQuery(value:String) = Action.async { implicit request =>
val result: Future[Seq[User]] = db.run {
sql"select * from users where name = '#$value'".as[User]
}
...
}


μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM users
WHERE name = <userName>


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” userName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ userName에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM users
WHERE name = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€λ˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 λ‹¨μˆœν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM users;


μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ κ³΅κ²©μžλŠ” 쿼리가 μ§€μ •λœ μ‚¬μš©μžκ°€ μ†Œμœ ν•œ μ‚¬μš©μžλ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •ν•œ μ‚¬μš©μžμ— 관계없이 users ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ κ²€μ‚¬λŠ” μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL Injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL Injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL Injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL Injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ 말해, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL Injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] IDS00-J. Prevent SQL Injection CERT
[6] INJECT-2: Avoid dynamic SQL Oracle
[7] Standards Mapping - Common Weakness Enumeration CWE ID 89
[8] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[12] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[13] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[14] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[15] Standards Mapping - FIPS200 SI
[16] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[17] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[18] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Directive 4.14, Rule 1.3
[19] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 0-3-1
[20] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
[21] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[22] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[23] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[24] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[25] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[26] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[27] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[28] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[29] Standards Mapping - OWASP Top 10 2010 A1 Injection
[30] Standards Mapping - OWASP Top 10 2013 A1 Injection
[31] Standards Mapping - OWASP Top 10 2017 A1 Injection
[32] Standards Mapping - OWASP Top 10 2021 A03 Injection
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[38] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[39] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[40] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[41] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[42] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[43] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[44] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[45] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[46] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[47] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[48] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[54] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[55] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[68] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[69] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[70] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[71] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[72] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.scala.sql_injection
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL Injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.

2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.
예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •ν•œ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜κΈ° μœ„ν•œ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© ownerκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
let queryStatementString = "SELECT * FROM items WHERE owner='\(username)' AND itemname='\(item)'"
var queryStatement: OpaquePointer? = nil
if sqlite3_prepare_v2(db, queryStatementString, -1, &queryStatement, nil) == SQLITE_OK {
if sqlite3_step(queryStatement) == SQLITE_ROW {
...
}
}
...


이 μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = '<userName>'
AND itemname = '<itemName>'


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€λ˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 λ‹¨μˆœν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 3: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'); DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ κ²€μ‚¬λŠ” μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL Injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL Injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL Injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL Injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ 말해, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL Injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] Parameterized CRecordset and CDatabase for SQL Server
[6] Parameterizing a Recordset Microsoft
[7] ODBC API Reference: SQLNumParams() Microsoft
[8] ODBC API Reference: SQLBindParameter() Microsoft
[9] OLE DB Reference: ICommandWithParameters Microsoft
[10] Standards Mapping - Common Weakness Enumeration CWE ID 89
[11] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[12] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[13] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[14] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[15] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[16] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[17] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[18] Standards Mapping - FIPS200 SI
[19] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[20] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[21] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Directive 4.14, Rule 1.3
[22] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 0-3-1
[23] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
[24] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[25] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[26] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[27] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[28] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[29] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[30] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[31] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[32] Standards Mapping - OWASP Top 10 2010 A1 Injection
[33] Standards Mapping - OWASP Top 10 2013 A1 Injection
[34] Standards Mapping - OWASP Top 10 2017 A1 Injection
[35] Standards Mapping - OWASP Top 10 2021 A03 Injection
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[38] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[39] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[40] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[41] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[42] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[43] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[44] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[45] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[46] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[47] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[48] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[49] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[50] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[51] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[54] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[55] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[56] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[57] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[58] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[68] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[69] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[70] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[71] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[72] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[73] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[74] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[75] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.swift.sql_injection
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.



2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.

예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •λœ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜λŠ” SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
username = Session("username")
itemName = Request.Form("itemName")
strSQL = "SELECT * FROM items WHERE owner = '"& userName &"' AND itemname = '" & itemName &"'"
objRecordSet.Open strSQL, strConnect, adOpenDynamic, adLockOptimistic, adCmdText
...


μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€ν•˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 κ°„λ‹¨ν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'; DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ κ²€μ‚¬λŠ” μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν’€μ΄ν•˜μ§€λ§Œ, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] Standards Mapping - Common Weakness Enumeration CWE ID 89
[6] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[7] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[8] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[12] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[13] Standards Mapping - FIPS200 SI
[14] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[15] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
[16] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Directive 4.14, Rule 1.3
[17] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 0-3-1
[18] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 4.1.3
[19] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[20] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[21] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[22] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[23] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[24] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[25] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[26] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[27] Standards Mapping - OWASP Top 10 2010 A1 Injection
[28] Standards Mapping - OWASP Top 10 2013 A1 Injection
[29] Standards Mapping - OWASP Top 10 2017 A1 Injection
[30] Standards Mapping - OWASP Top 10 2021 A03 Injection
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[38] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[39] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[40] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[41] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[42] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[43] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[44] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[45] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[46] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[68] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[69] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[70] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.vb.sql_injection
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 μ‚¬μš©ν•˜μ—¬ 동적 Castle ActiveRecord 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
Castle ActiveRecord와 κ΄€λ ¨λœ SQL injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.

2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.
예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •λœ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜λŠ” Castle ActiveRecord 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 ownerκ°€ μΌμΉ˜ν•˜λŠ” ν•­λͺ©λ§Œ ν‘œμ‹œν•˜λ„λ‘ μ œν•œν•©λ‹ˆλ‹€.


...
string userName = ctx.getAuthenticatedUserName();
string queryString = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ ItemName.Text + "'";

SimpleQuery<Item> queryObject = new SimpleQuery(queryString);
Item[] items = (Item[])queryObject.Execute(query);

...


μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€ν•˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 κ°„λ‹¨ν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

Castle ActiveRecord injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ 검사가 μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” Castle ActiveRecord 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ Castle ActiveRecord SQL injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

Castle ActiveRecord 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ Castle ActiveRecord SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

Castle ActiveRecord injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ Castle ActiveRecord injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ Castle ActiveRecord SQL injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν’€μ΄ν•˜μ§€λ§Œ, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ Castle ActiveRecord injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] Standards Mapping - Common Weakness Enumeration CWE ID 89
[6] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[7] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[8] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[12] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[13] Standards Mapping - FIPS200 SI
[14] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[15] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[16] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[17] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[18] Standards Mapping - OWASP Mobile 2014 M1 Weak Server Side Controls
[19] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4, MASVS-PLATFORM-1
[20] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[21] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[22] Standards Mapping - OWASP Top 10 2010 A1 Injection
[23] Standards Mapping - OWASP Top 10 2013 A1 Injection
[24] Standards Mapping - OWASP Top 10 2017 A1 Injection
[25] Standards Mapping - OWASP Top 10 2021 A03 Injection
[26] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[27] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[28] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[29] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[30] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[35] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[36] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[37] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[38] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[39] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[40] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[41] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[42] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[43] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[44] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[45] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[46] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[49] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[50] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[51] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[52] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[53] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[65] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.dotnet.sql_injection_castleActiveRecord
Abstract
Hibernateλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯으둜 λ§Œλ“€μ–΄μ§„ 동적 SQL 문을 μ‹€ν–‰ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.



2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ HQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.

예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •λœ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜λŠ” HQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
String userName = ctx.getAuthenticatedUserName();
String itemName = request.getParameter("itemName");
String query = "FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ itemName + "'";
List items = sess.createQuery(query).list();
...


μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€ν•˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 κ°„λ‹¨ν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'; DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ 검사가 μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 효과적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν’€μ΄ν•˜μ§€λ§Œ, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈ μœ ν˜•μ€ 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] Hibernate API Documentation
[6] IDS00-J. Prevent SQL Injection CERT
[7] INJECT-2: Avoid dynamic SQL Oracle
[8] Standards Mapping - Common Weakness Enumeration CWE ID 564
[9] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[12] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[13] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[14] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[15] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[16] Standards Mapping - FIPS200 SI
[17] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[18] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[19] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[20] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[21] Standards Mapping - OWASP Mobile 2014 M1 Weak Server Side Controls
[22] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4, MASVS-PLATFORM-1
[23] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[24] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[25] Standards Mapping - OWASP Top 10 2010 A1 Injection
[26] Standards Mapping - OWASP Top 10 2013 A1 Injection
[27] Standards Mapping - OWASP Top 10 2017 A1 Injection
[28] Standards Mapping - OWASP Top 10 2021 A03 Injection
[29] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[30] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[38] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[39] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[40] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[41] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[42] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[43] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[44] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[45] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[46] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[50] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[51] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[52] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[53] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[66] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.java.sql_injection_hibernate
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL Injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ˜ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.

2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.



iBatis Data Map을 μ‚¬μš©ν•˜λ©΄ SQL λ¬Έμ—μ„œ 동적 λ§€κ°œλ³€μˆ˜λ₯Ό 지정할 수 있으며 일반적으둜 iBatis Data Map은 λ‹€μŒκ³Ό 같이 # 문자λ₯Ό μ‚¬μš©ν•˜μ—¬ μ •μ˜λ©λ‹ˆλ‹€.


<select id="getItems" parameterClass="MyClass" resultClass="items">
SELECT * FROM items WHERE owner = #userName#
</select>


λ³€μˆ˜ 이름 μ£Όμœ„μ˜ # λ¬ΈμžλŠ” iBatisκ°€ userName λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 맀개 λ³€μˆ˜ν™”λœ 쿼리λ₯Ό λ§Œλ“œλŠ” 것을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 그뿐만 μ•„λ‹ˆλΌ iBatisλŠ” $ 문자λ₯Ό μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜λ₯Ό SQL 문에 직접 μ—°κ²°ν•˜λŠ” 것도 ν—ˆμš©ν•¨μœΌλ‘œμ¨ SQL Injection의 기회λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •ν•œ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜κΈ° μœ„ν•œ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


<select id="getItems" parameterClass="MyClass" resultClass="items">
SELECT * FROM items WHERE owner = #userName# AND itemname = '$itemName$'
</select>


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ name' OR 'a'='aλ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€λ˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 λ‹¨μˆœν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'; DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’μ˜ ν—ˆμš© λͺ©λ‘μ˜ 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘μ„ ν™•μΈν•˜λŠ” 것은 μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘μ„ κ΅¬ν˜„ν•˜λŠ” 것은 SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL Injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL Injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL Injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ 말해, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL Injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] iBatis Working with Data Maps
[2] iBatis Data Mapper Developer Guide
[3] S. J. Friedl SQL Injection Attacks by Example
[4] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[5] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[6] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[7] IDS00-J. Prevent SQL Injection CERT
[8] Standards Mapping - Common Weakness Enumeration CWE ID 89
[9] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[12] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[13] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[14] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[15] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[16] Standards Mapping - FIPS200 SI
[17] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[18] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[19] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[20] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[21] Standards Mapping - OWASP Mobile 2014 M1 Weak Server Side Controls
[22] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[23] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[24] Standards Mapping - OWASP Top 10 2010 A1 Injection
[25] Standards Mapping - OWASP Top 10 2013 A1 Injection
[26] Standards Mapping - OWASP Top 10 2017 A1 Injection
[27] Standards Mapping - OWASP Top 10 2021 A03 Injection
[28] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[29] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[30] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[37] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[38] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[39] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[40] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[41] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[42] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[43] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[44] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[45] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[46] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[51] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[52] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[53] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[67] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.config.java.sql_injection_ibatis_data_map
Abstract
JDO(Java Data Objects)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯으둜 λ§Œλ“€μ–΄μ§„ 동적 SQL λ˜λŠ” JDOQL 문을 μ‹€ν–‰ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.



2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL λ˜λŠ” JDOQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.

예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •λœ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜λŠ” SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
String userName = ctx.getAuthenticatedUserName();
String itemName = request.getParameter("itemName");
String sql = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ itemName + "'";
Query query = pm.newQuery(Query.SQL, sql);
query.setClass(Person.class);
List people = (List)query.execute();
...


μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€ν•˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 κ°„λ‹¨ν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'; DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ 검사가 μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 효과적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν’€μ΄ν•˜μ§€λ§Œ, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈ μœ ν˜•μ€ 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] JDO API Documentation
[6] IDS00-J. Prevent SQL Injection CERT
[7] INJECT-2: Avoid dynamic SQL Oracle
[8] Standards Mapping - Common Weakness Enumeration CWE ID 89
[9] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[12] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[13] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[14] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[15] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[16] Standards Mapping - FIPS200 SI
[17] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[18] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[19] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[20] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[21] Standards Mapping - OWASP Mobile 2014 M1 Weak Server Side Controls
[22] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[23] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[24] Standards Mapping - OWASP Top 10 2010 A1 Injection
[25] Standards Mapping - OWASP Top 10 2013 A1 Injection
[26] Standards Mapping - OWASP Top 10 2017 A1 Injection
[27] Standards Mapping - OWASP Top 10 2021 A03 Injection
[28] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[29] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[30] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[37] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[38] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[39] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[40] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[41] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[42] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[43] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[44] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[45] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[46] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[51] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[52] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[53] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[67] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.java.sql_injection_jdo
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ LINQ 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
LINQ와 κ΄€λ ¨λœ Injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.

2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.
예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •λœ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜λŠ” LINQ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 ownerκ°€ μΌμΉ˜ν•˜λŠ” ν•­λͺ©λ§Œ ν‘œμ‹œν•˜λ„λ‘ μ œν•œν•©λ‹ˆλ‹€.


...
string userName = ctx.getAuthenticatedUserName();
string query = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ ItemName.Text + "'";

var items = dataContext.ExecuteCommand<Item>(query);
...


μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€ν•˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 κ°„λ‹¨ν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'); DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


LINQ injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ 검사가 μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” LINQ 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ LINQ injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

LINQ 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ LINQ injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

LINQ injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ LINQ injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” LINQ 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ LINQ injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν’€μ΄ν•˜μ§€λ§Œ, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ LINQ injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] Standards Mapping - Common Weakness Enumeration CWE ID 89
[6] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[7] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[8] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[12] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[13] Standards Mapping - FIPS200 SI
[14] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[15] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[16] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[17] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[18] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[19] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[20] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[21] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[22] Standards Mapping - OWASP Top 10 2010 A1 Injection
[23] Standards Mapping - OWASP Top 10 2013 A1 Injection
[24] Standards Mapping - OWASP Top 10 2017 A1 Injection
[25] Standards Mapping - OWASP Top 10 2021 A03 Injection
[26] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[27] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[28] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[29] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[30] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[35] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[36] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[37] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[38] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[39] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[40] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[41] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[42] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[43] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[44] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[45] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[46] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[49] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[50] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[51] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[52] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[53] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[65] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.dotnet.sql_injection_linq
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ SQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL Injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ˜ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.

2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.



MyBatis Mapper XML νŒŒμΌμ„ μ‚¬μš©ν•˜λ©΄ SQL λ¬Έμ—μ„œ 동적 맀개 λ³€μˆ˜λ₯Ό 지정할 수 있으며 일반적으둜 λ‹€μŒκ³Ό 같이 # 문자λ₯Ό μ‚¬μš©ν•˜μ—¬ μ •μ˜λ©λ‹ˆλ‹€.


<select id="getItems" parameterType="domain.company.MyParamClass" resultType="MyResultMap">
SELECT *
FROM items
WHERE owner = #{userName}
</select>


λ³€μˆ˜ 이름 μ£Όμœ„μ— μ€‘κ΄„ν˜Έκ°€ μžˆλŠ” # λ¬ΈμžλŠ” MyBatisκ°€ userName λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 맀개 λ³€μˆ˜ν™”λœ 쿼리λ₯Ό λ§Œλ“œλŠ” 것을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 뿐만 μ•„λ‹ˆλΌ MyBatisλŠ” $ 문자λ₯Ό μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜λ₯Ό SQL 문에 직접 μ—°κ²°ν•˜λŠ” 것도 ν—ˆμš©ν•¨μœΌλ‘œμ¨ SQL Injection의 기회λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •ν•œ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜κΈ° μœ„ν•œ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© μ†Œμœ μžκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


<select id="getItems" parameterType="domain.company.MyParamClass" resultType="MyResultMap">
SELECT *
FROM items
WHERE owner = #{userName}
AND itemname = ${itemName}
</select>


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ name' OR 'a'='aλ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ WHERE 절이 항상 true둜 ν‰κ°€λ˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 λ‹¨μˆœν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ "name'; DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’μ˜ ν—ˆμš© λͺ©λ‘μ˜ 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘μ„ ν™•μΈν•˜λŠ” 것은 μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘μ„ κ΅¬ν˜„ν•˜λŠ” 것은 SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL Injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μ•ˆμ „ν•˜λ‹€κ³  보μž₯ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL Injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL Injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ 말해, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈλŠ” 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL Injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] MyBatis MyBatis 3 | Mapper XML Files
[2] MyBatis MyBatis 3 | Dynamic SQL
[3] S. J. Friedl SQL Injection Attacks by Example
[4] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[5] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[6] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[7] IDS00-J. Prevent SQL Injection CERT
[8] INJECT-2: Avoid dynamic SQL Oracle
[9] Standards Mapping - Common Weakness Enumeration CWE ID 89
[10] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[12] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[13] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[14] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[15] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[16] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[17] Standards Mapping - FIPS200 SI
[18] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[19] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[20] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[21] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[22] Standards Mapping - OWASP Mobile 2014 M1 Weak Server Side Controls
[23] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4, MASVS-PLATFORM-1
[24] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[25] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[26] Standards Mapping - OWASP Top 10 2010 A1 Injection
[27] Standards Mapping - OWASP Top 10 2013 A1 Injection
[28] Standards Mapping - OWASP Top 10 2017 A1 Injection
[29] Standards Mapping - OWASP Top 10 2021 A03 Injection
[30] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[38] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[39] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[40] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[41] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[42] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[43] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[44] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[45] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[46] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[53] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[68] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[69] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.config.java.sql_injection_mybatis_mapper
Abstract
NHibernateλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯으둜 λ§Œλ“€μ–΄μ§„ 동적 SQL 문을 μ‹€ν–‰ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ SQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL injection 였λ₯˜λŠ” λ‹€μŒ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.

2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.
예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •λœ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜λŠ” SQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 ownerκ°€ μΌμΉ˜ν•˜λŠ” ν•­λͺ©λ§Œ ν‘œμ‹œν•˜λ„λ‘ μ œν•œν•©λ‹ˆλ‹€.


...
string userName = ctx.GetAuthenticatedUserName();
string query = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ ItemName.Text + "'";
List items = sess.CreateSQLQuery(query).List();
...


μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” ItemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ ItemName에 λ¬Έμžμ—΄ "name' OR 'a'='a"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€ν•˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 κ°„λ‹¨ν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.


SELECT * FROM items;


κ³΅κ²©μžλŠ” μ΄λ ‡κ²Œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ 쿼리가 인증된 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ ν•­λͺ©λ§Œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” μš”κ΅¬ 사항을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 μΏΌλ¦¬λŠ” μ§€μ •λœ μ†Œμœ μžμ™€ 관계없이 items ν…Œμ΄λΈ”μ— μ €μž₯된 λͺ¨λ“  ν•­λͺ©μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

예제 2: 이 μ˜ˆμ œλŠ” Example 1μ—μ„œ μƒμ„±ν•˜μ—¬ μˆ˜ν–‰ν•œ 쿼리에 또 λ‹€λ₯Έ μ•…μ„± 값이 전달될 λ•Œμ˜ κ²°κ³Όλ₯Ό κ²€ν† ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ ItemName에 λ¬Έμžμ—΄ "name'; DELETE FROM items; --"λ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같은 두 개의 쿼리가 λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

--'


Microsoft(R) SQL Server 2000을 ν¬ν•¨ν•œ λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ—¬λŸ¬ SQL 문을 μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜λŠ” 것을 ν—ˆμš©ν•©λ‹ˆλ‹€. 이 곡격 λ¬Έμžμ—΄μ€ μ„Έλ―Έμ½œλ‘ μœΌλ‘œ κ΅¬λΆ„ν•œ 문에 λŒ€ν•œ 일괄 싀행을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” Oracle 및 기타 λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” 였λ₯˜λ₯Ό μΌμœΌν‚€μ§€λ§Œ 일괄 싀행을 ν—ˆμš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ³΅κ²©μžκ°€ 이런 μ’…λ₯˜μ˜ 곡격으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μ˜ ν•˜μ΄ν”ˆ 쌍(--)을 λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ ν•΄λ‹Ή 문에 λŒ€ν•œ λ‚˜λ¨Έμ§€ 뢀뢄을 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ‹€ν–‰ν•˜μ§€ λ§λΌλŠ” 의미둜 ν•΄μ„λ©λ‹ˆλ‹€[4]. 이 경우, 이 주석 λ¬ΈμžλŠ” μˆ˜μ •λœ μΏΌλ¦¬μ—μ„œ λ§ˆμ§€λ§‰μ˜ μž‘μ€λ”°μ˜΄ν‘œ ν•œμͺ½μ„ μ œκ±°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 주석을 이런 μ‹μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ Example 1μ—μ„œ λ³Έ 것과 μœ μ‚¬ν•œ μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ 곡격이 효과λ₯Ό κ±°λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λ¬Έμžμ—΄ "name'; DELETE FROM items; SELECT * FROM items WHERE 'a'='a"λ₯Ό μž…λ ₯ν•˜μ—¬ λ‹€μŒ μ„Έ 가지 μœ νš¨ν•œ 문을 λ§Œλ“œλŠ” κ²½μš°μž…λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';


SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’ λͺ©λ‘(ν—ˆμš© λͺ©λ‘)의 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘ 검사가 μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 효과적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘ κ΅¬ν˜„μ€ SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

SQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ SQL injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

SQL injection 곡격을 λ‹€λ£¨λŠ” 데 주둜 μ œμ‹œλ˜λŠ” λ‹€λ₯Έ μ†”λ£¨μ…˜μ€ μ €μž₯ ν”„λ‘œμ‹œμ €(stored procedure)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μœ ν˜•μ˜ SQL injection 곡격은 막을 수 μžˆμ§€λ§Œ λ‹€λ₯Έ λ§Žμ€ μœ ν˜•μ€ 막지 λͺ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일반적으둜 맀개 λ³€μˆ˜μ— μ „λ‹¬λ˜λŠ” SQL 문의 μœ ν˜•μ„ μ œν•œν•˜μ—¬ SQL injection 곡격을 λ§‰μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 μ œμ•½μ„ ν”Όν•  수 μžˆλŠ” λ§Žμ€ 방법이 μžˆμ–΄ μˆ˜λ§Žμ€ 비정상적인 문을 μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)에 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν’€μ΄ν•˜μ§€λ§Œ, μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λŠ” 일뢀 μ΅μŠ€ν”Œλ‘œμ΄νŠΈ μœ ν˜•μ€ 막을 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ SQL injection 곡격에 λŒ€ν•΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] NHibernate API Documentation
[6] Standards Mapping - Common Weakness Enumeration CWE ID 89
[7] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[8] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[12] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[13] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[14] Standards Mapping - FIPS200 SI
[15] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[16] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[17] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[18] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[19] Standards Mapping - OWASP Mobile 2014 M1 Weak Server Side Controls
[20] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4, MASVS-PLATFORM-1
[21] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[22] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[23] Standards Mapping - OWASP Top 10 2010 A1 Injection
[24] Standards Mapping - OWASP Top 10 2013 A1 Injection
[25] Standards Mapping - OWASP Top 10 2017 A1 Injection
[26] Standards Mapping - OWASP Top 10 2021 A03 Injection
[27] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[28] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[29] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[30] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[36] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[37] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[38] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[39] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[40] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[41] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[42] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[43] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[44] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[45] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[46] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[50] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[51] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[52] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[53] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[66] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.dotnet.sql_injection_nhibernate
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ PartiQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ PartiQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL Injection: PartiQL λ¬Έμ œλŠ” λ‹€μŒκ³Ό 같은 κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ˜ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.

2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ PartiQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.
예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •ν•œ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜κΈ° μœ„ν•œ PartiQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© ownerκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.


...
string userName = identity.User;
string itemName = apiGatewayProxyRequest.QueryStringParameters['item'];
string statement = $"SELECT * FROM items WHERE owner = '{userName}' AND itemname = '{itemName}'";

var executeStatementRequest = new ExecuteStatementRequest();
executeStatementRequest.Statement = statement;
var executeStatementResponse = await dynamoDBClient.ExecuteStatementAsync(executeStatementRequest);
return displayResults(executeStatementResponse.Items);
...


이 μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;


ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ name' OR 'a'='aλ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.


SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€λ˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 λ‹¨μˆœν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.

SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’μ˜ ν—ˆμš© λͺ©λ‘μ˜ 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘μ„ ν™•μΈν•˜λŠ” 것은 μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘μ„ κ΅¬ν˜„ν•˜λŠ” 것은 SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

PartiQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ PartiQL Injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] PartiQL - A SQL-Compatible Query Language for Amazon DynamoDB
[6] Standards Mapping - Common Weakness Enumeration CWE ID 89
[7] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[8] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[9] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[12] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[13] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[14] Standards Mapping - FIPS200 SI
[15] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[16] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[17] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[18] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[19] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[20] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[21] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[22] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[23] Standards Mapping - OWASP Top 10 2010 A1 Injection
[24] Standards Mapping - OWASP Top 10 2013 A1 Injection
[25] Standards Mapping - OWASP Top 10 2017 A1 Injection
[26] Standards Mapping - OWASP Top 10 2021 A03 Injection
[27] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[28] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[29] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[30] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[36] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[37] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[38] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[39] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[40] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[41] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[42] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[43] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[44] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[45] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[46] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[50] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[51] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[52] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[53] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[66] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.dotnet.sql_injection_partiql
Abstract
μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ—μ„œ λ‚˜μ˜¨ μž…λ ₯을 λ°›μ•„ λ™μ μœΌλ‘œ PartiQL 문을 μƒμ„±ν•˜λ©΄ κ³΅κ²©μžκ°€ ν•΄λ‹Ή 문의 의미λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μž„μ˜μ˜ PartiQL λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Explanation
SQL Injection: PartiQL λ¬Έμ œλŠ” λ‹€μŒκ³Ό 같은 κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

1. μ‹ λ’°ν•  수 μ—†λŠ” μ†ŒμŠ€μ˜ 데이터가 ν”„λ‘œκ·Έλž¨μ— μž…λ ₯λ©λ‹ˆλ‹€.

2. 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ PartiQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.
예제 1: λ‹€μŒ μ½”λ“œλŠ” μ§€μ •ν•œ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ κ²€μƒ‰ν•˜κΈ° μœ„ν•œ PartiQL 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. μΏΌλ¦¬λŠ” ν‘œμ‹œλ˜λŠ” ν•­λͺ©μ„ ν•­λͺ© ownerκ°€ ν˜„μž¬ 인증된 μ‚¬μš©μžμ˜ 이름과 μΌμΉ˜ν•˜λŠ” ν•­λͺ©μœΌλ‘œ μ œν•œν•©λ‹ˆλ‹€.

...
String userName = identity.getUser();
String itemName = apiGatewayProxyRequest.getQueryStringParameters('item');
String statement = String.format("SELECT * FROM items WHERE owner = '%s' AND itemname = '%s'", userName, itemName);
ExecuteStatementRequest executeStatementRequest = new ExecuteStatementRequest();
executeStatementRequest.setStatement(statement);
ExecuteStatementResponse executeStatementResponse = dynamoDBClient.executeStatement(executeStatementRequest);
return displayResults(executeStatementResponse.items());
...

이 μΏΌλ¦¬λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;

ν•˜μ§€λ§Œ μƒμˆ˜μΈ κΈ°λ³Έ 쿼리 λ¬Έμžμ—΄κ³Ό μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ„ μ—°κ²°ν•˜μ—¬ 쿼리λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—, μΏΌλ¦¬λŠ” itemName에 μž‘μ€λ”°μ˜΄ν‘œκ°€ λ“€μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ •ν™•ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€. μ‚¬μš©μž 이름이 wiley인 κ³΅κ²©μžκ°€ itemName에 λ¬Έμžμ—΄ name' OR 'a'='aλ₯Ό μž…λ ₯ν•˜λ©΄ μΏΌλ¦¬λŠ” λ‹€μŒκ³Ό 같이 μƒμ„±λ©λ‹ˆλ‹€.

SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a' 쑰건을 μΆ”κ°€ν•˜λ©΄ where 절이 항상 true둜 ν‰κ°€λ˜κΈ° λ•Œλ¬Έμ— μΏΌλ¦¬λŠ” 훨씬 λ‹¨μˆœν•œ λ‹€μŒ 쿼리와 λ…Όλ¦¬μ μœΌλ‘œ λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.
SQL Injection 곡격을 λ°©μ§€ν•˜λŠ” ν•œ 가지 기쑴의 μ ‘κ·Ό 방식은 곡격을 μž…λ ₯κ°’ 검증 문제둜 μ²˜λ¦¬ν•˜κ³  μ•ˆμ „ν•œ κ°’μ˜ ν—ˆμš© λͺ©λ‘μ˜ 문자만 λ°›κ±°λ‚˜ μ•…μ˜μ μΌ κ°€λŠ₯성이 μžˆλŠ” κ°’ λͺ©λ‘(κ±°λΆ€ λͺ©λ‘)을 μ‹λ³„ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν—ˆμš© λͺ©λ‘μ„ ν™•μΈν•˜λŠ” 것은 μ—„κ²©ν•œ μž…λ ₯κ°’ 검증 κ·œμΉ™μ„ μ΄ν–‰ν•˜λŠ” 맀우 효율적인 μˆ˜λ‹¨μ΄ λ˜κΈ°λ„ ν•˜μ§€λ§Œ, 맀개 λ³€μˆ˜κ°€ μžˆλŠ” SQL 문은 μœ μ§€ 관리가 쉽고 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κ±°λΆ€ λͺ©λ‘μ„ κ΅¬ν˜„ν•˜λŠ” 것은 SQL Injection 곡격 λ°©μ§€μ˜ 효과λ₯Ό λ–¨μ–΄λœ¨λ¦¬λŠ” ν—ˆμ μ΄ μ•„μ£Ό λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ³΅κ²©μžλŠ” λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- λ”°μ˜΄ν‘œλ‘œ 묢지 μ•Šμ€ ν•„λ“œλ₯Ό λ…Έλ¦½λ‹ˆλ‹€.
- μ΄μŠ€μΌ€μ΄ν”„ 처리된 메타 문자λ₯Ό μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ” 방법을 μ°ΎμŠ΅λ‹ˆλ‹€.
- μ €μž₯ ν”„λ‘œμ‹œμ €(Stored procedure)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…λœ 메타 문자λ₯Ό μˆ¨κΉλ‹ˆλ‹€.

PartiQL 쿼리에 μž…λ ₯ν•  λ•Œ μˆ˜λ™μœΌλ‘œ 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμ§€λ§Œ μ΄κ²ƒμœΌλ‘œ PartiQL Injection κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ³΄ν˜Έν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
References
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] PartiQL - A SQL-Compatible Query Language for Amazon DynamoDB
[6] IDS00-J. Prevent SQL Injection CERT
[7] INJECT-2: Avoid dynamic SQL Oracle
[8] Standards Mapping - Common Weakness Enumeration CWE ID 89
[9] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[10] Standards Mapping - Common Weakness Enumeration Top 25 2020 [6] CWE ID 089
[11] Standards Mapping - Common Weakness Enumeration Top 25 2021 [6] CWE ID 089
[12] Standards Mapping - Common Weakness Enumeration Top 25 2022 [3] CWE ID 089
[13] Standards Mapping - Common Weakness Enumeration Top 25 2023 [3] CWE ID 089
[14] Standards Mapping - Common Weakness Enumeration Top 25 2024 [3] CWE ID 089
[15] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[16] Standards Mapping - FIPS200 SI
[17] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[18] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[19] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[20] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.5 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[21] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[22] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[23] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[24] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[25] Standards Mapping - OWASP Top 10 2010 A1 Injection
[26] Standards Mapping - OWASP Top 10 2013 A1 Injection
[27] Standards Mapping - OWASP Top 10 2017 A1 Injection
[28] Standards Mapping - OWASP Top 10 2021 A03 Injection
[29] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[30] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[37] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[38] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[39] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[40] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[41] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[42] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[43] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[44] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[45] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[46] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[47] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[48] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[49] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[52] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[53] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[63] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[64] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[65] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[66] Standards Mapping - Security Technical Implementation Guide Version 6.2 APSC-DV-002530 CAT II, APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[67] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
[68] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
desc.dataflow.java.sql_injection_partiql