[캡쳐 1] https://owasp.org/Top10/A03_2021-Injection/

인젝션(Injection)이란 정상적이지 않은 혹은 조작된 입력값을 삽입하여 인터프리터나 SQL 해석 등에서 처리되도록 하여 정보를 탈취하거나 임의의 명령을 실행하려는 시도를 말한다. 웹 어플리케이션과 관련된 취약점 유형 중 가장 많이 공격에 이용되는 유형이다.

OWASP TOP 10 2017에서는 A01으로 소개되었으며, 2021에서는 Cross-Site Scripting(XSS)이 포함되어 A03으로 소개되었다. XSS가 포함됨으로써, OWASP TOP 10 2021에서는 입력값 조작을 통한 공격이 Injection으로 통일되었다.

대응책으로는, 시큐어 코딩을 통해 사용자 입력값을 적절히 필터링하거나 검증하는 절차를 거쳐야한다. 혹은, 사용자가 허용된 입력값만을 사용할 수 있도록 화이트리스트 기반 서버측 검증을 수행한다. 알려진 취약점 등의 시그니처를 보안 솔루션에 등록하여 공격 시도를 탐지하고, 차단하여야 한다. 또한, DB나 Web 로그를 통해 관련된 공격 시도의 유무를 확인할 수 있다.

취약점 유형

SQL Injection, NoSQL Injection
OS command
Object Relational Mapping (ORM) Injection
LDAP Injection
Expression Language (EL) Injection
Object Graph Navigation Library (OGNL) injection


공격 시나리오

[캡쳐 2] SQL Injection에 취약한 소스코드

[캡쳐 2]는 SQL Injection에 취약한 소스코드이며, 사용자가 입력한 id 값을 적절한 검증 없이 user_id 값으로 설정한 후 SQL 쿼리문 완성 및 execute() 함수를 통해 실행시키는 것을 볼 수 있다.

[캡쳐 3] SQL Injection

[캡쳐 3] 처럼 값을 준 후 Submit을 클릭할 경우, [캡쳐 2]에 의해 query 변수는 하기와 같이 완성된다. 피연사자 중 하나라도 참인 경우 결과값으로 참을 반환하는 or 연산의 특징으로 인해, user_id=''이 거짓이라도 '1'='1'이 참이므로 해당 쿼리문은 정상적으로 수행된다.

SELECT first_name, last_name FROM users WHERE user_id = '' or '1'='1';

 

[캡쳐 4] 쿼리 수행 결과

[캡쳐 4]를 통해 공격자는 ' or '1'='1 이라는 조작된 값을 입력하였지만, 정상적으로 쿼리가 수행된 것을 알 수 있다. 또한, 공격자는 users 테이블의 first_name, last_name 칼럼 정보를 확인할 수 있다.

대응방안

사용자 입력 값 검증 (시큐어 코딩, 화이트리스트 기반 서버측 검증)
특수문자 이스케이프 (사용자 입력값이 SQL 쿼리문이나 명령의 일부로 인식되지 않도록)
알려진 Injection 취약점 또는 공격에 사용되는 명령어 등의 시그니처 보안 솔루션 등록 후 탐지 및 차단

[캡쳐 1] https://owasp.org/Top10/A02_2021-Cryptographic_Failures/

암호화(Crypto)란 알고리즘을 이용해 평문 데이터를 인증 키를 가진 사람만이 볼 수 없도록 암호문으로 변환하는 것이다. 즉, 전송하고, 수신하고, 저장하는 정보를 다른 사람이 해독할 수 없도록 하는 것이다. 암호화가 적절히 수행되지 않거나 미수행된 경우 외부의 사용자에게 중요하거나 민감한 데이터가 노출될 수 있다.

OWASP TOP 10 2017에서는 A03 민감한 데이터 노출(Sensitive Data Exposure)로 소개되었으며, 2021에서는 한단계 상승한 A02로 선정되었다.

대응책으로는, 최신 버전의 암호 프로토콜 및 암호 알고리즘을 사용하며, 암호화 키를 고정된 길이 또는 재사용 하지 않도록 한다. 금융 정보와 개인정보의 경우 법과 규정에 따라 안전히 보호하기 위한 추가조치를 수행해야 한다. 국내에 관련된 규정으로는 개인정보보호법, 정보통신망법, 신용정보법, ISMS-P 인증, ISO 27001 인증 등이 있다.

 

취약점 유형

데이터가 평문 전송되는 경우(HTTP, FTP, TELNET 등)
취약한 암호 프로토콜을 사용하는 경우(SSL v2.0, SSL v3.0, TLS v1.0, TLS v1.1)
취약한 암호 알고리즘을 사용하는 경우(DES, RC4, MD5 등)
고정된 암호 키나 암호키를 재사용하는 경우(Salt와 같은 일회용 난수 미사용)
미흡한 암호화 키 관리(하드코딩 등)

 

공격 시나리오

[캡쳐 2] bwapp 민감 정보 노출

공격자가 네트워크를 스니핑하고 있는 상태에서 중요 정보(계정정보, 세션ID 등)가 포함된 데이터를 평문 전송하는 경우, 공격자는 평문으로 노출된 중요 정보를 통해 해당 시스템에 로그인할 수 있다.

 

대응방안

레거시 프로토콜 미사용
최신 버전의 암호 프로토콜, 알고리즘 사용
보안 헤더 설정을 통한 HSTS(HTTP Strict Transport Security_HTTP를 HTTPS로 강제 리다이렉트) 설정
의사 난수 생성기 등을 통해 일회용 난수를 생성해 암호키 또는 암호문 생성시에 적용
신뢰할 수 있는 기관에서 발행한 인증서 사용

[캡쳐 1] https://owasp.org/Top10/A01_2021-Broken_Access_Control/

접근 제어(Access Control)란 사용자에게 허용 또는 거부의 권한을 부여하여 사용자가 주어진 권한을 벗어나 행동하는 것을 막는 것이다. 접근 제어가 취약하게 구현되어 있을 경우 사용자는 주어진 권한을 벗어나 허용되지 않은 데이터나 자원에 접근하여, 조회, 삭제, 갱신 등을 할 수 있게 된다.

 

OWASP TOP 10 2017에서는 A05로 확인되나 2021에서는 4단계 상승한 A01로 선정되었다. 그만큼 공격자들이 관련된 취약점을 이용한다는 것으로 판단된다. 또한, 과거에 비해 다수의 서비스를 제공하고, 페이지 수정 및 추가 등으로 인한 접근통제의 어려운 문제도 영향을 주었을 것으로 판단된다.

 

적절한 대응 책으로는, 초기 계획 단계부터 접근 권한과 관련된 계획을 세워야 할 필요가 있다. 설계 및 구현 단계에 적용해, 테스트 단계에서 검증을 수행하는 것이다. 그리고, 서비스 및 페이지가 추가되거나 변경될 경우 접근 권한이 누락 없이 적절히 적용되도록 해야 한다. 또한, 접근 권한의 적정성에 대해 주기적인 검토가 필요하다.  추가적으로 기본적으로 모든 접근에 대해 차단 정책을 적용하고, 접근이 가능한 대상을 지정하는 화이트리스트 기반 정책을 수립한다.

 

취약점 유형

일부 사용자(ex. 관리자)에게만 부여되어야 하는 권한을 모든 사용자들에게 부여할 경우
URL 파라미터, 쿠키 값 등을 변조하여 인증이 필요한 페이지에 접근하거나 타 사용자의 권한을 사용할 수 있는 경우
사용자 권한으로 로그인 후 관리자 권한으로 권한으로 상승하거나 활동할 수 있는 경우
DELET, PUT 등의 API 요청에 대한 접근제어가 누락된 경우
API 서버의 보안 설정 미흡

 

대응방안

계획 단계부터 적절한 접근권한 계획 수립 및 적용
서비스, 페이지의 생성, 변경 등에 따른 접근권한이 누락없이 적용되도록 관리
접근권한 적정성 검토
기본적으로 모든 접근을 차단하고, 접근이 가능한 대상을 지정(화이트리스트 기반)

 

공격 시나리오

 

bWAPP Directory Traversal(Files)

1. Directory Traversal이란? - 상위 디렉터리로 이동가능한 문자 ../ 를 이용해 상위 디렉터리로 접근하여 파일을 검색/다운 등이 가능한 취약점. - 접근 통제 및 검증, 서버 설정 미흡 등의 취약점으로

ggonmerr.tistory.com

 

참고

 

A01 Broken Access Control - OWASP Top 10:2021

A01:2021 – Broken Access Control Factors CWEs Mapped Max Incidence Rate Avg Incidence Rate Avg Weighted Exploit Avg Weighted Impact Max Coverage Avg Coverage Total Occurrences Total CVEs 34 55.97% 3.81% 6.92 5.93 94.55% 47.72% 318,487 19,013 Overview Mov

owasp.org

 

[캡쳐 1] OWASP (https://owasp.org/)

1. OWASP TOP 10

- OWASP(Open Web Application Security Project)는 오픈소스 웹 애플리케이션 보안 프로젝트로, 주로 웹에 관한 정보노출, 악성 파일 및 스크립트, 보안 취약점 등을 연구

- OWASP에서 3~4년에 한번씩 10대 애플리케이션 취약점을 발표하며, 이것이 OWASP TOP 10

- 즉, 웹 애플리케이션 취약점 중에서 빈도가 많이 발생하고, 보안상 영향을 크게 줄 수 있는 것들 10가지를 선정한 문서

2. OWASP TOP 10 2021 목록

[캡쳐 2] OWASP TOP 10 2021 (https://owasp.org/)

A01 : Broken Access Control (접근 권한 취약점)

- 접근 제어는 사용자가 권한을 벗어나 행동할 수 없도록 정책을 적용.

- 만약 엑세스 제어가 취약하면 사용자는 주어진 권한을 벗어나 모든 데이터를 무단으로 열람, 수정 혹은 삭제 등의 행위가 가능해짐

A02 : Cryptographic Failures (암호화 오류) 

- Sensitive Data Exposure(민감 데이터 노출)의 명칭이 변경.

- 적절한 암호화가 이루어지지 않으면 민감 데이터가 노출될 수 있음

A03: Injection (인젝션) 

- 신뢰할 수 없는 데이터가 명령어나 쿼리문의 일부분으로써, 인터프리터로 보내질 때 취약점이 발생 

A04: Insecure Design (안전하지 않은 설계)

- 누락되거나 비효율적인 제어 설계로 표현되는 다양한 취약점을 나타내는 카테고리

- 안전하지 않은 설계와 안전하지 않은 구현에는 차이가 있지만, 안전하지 않은 설계에서 취약점으로 이어지는 구현 결함이 있을 수 있음.

A05: Security Misconfiguration (보안설정오류)

- 최신 보안기능이 비활성화 되거나 안전하지 않게 구성되었을 때 발생합니다.

- Ex) 애플리케이션 스택의 적절한 보안 강화가 누락되었거나 클라우드 서비스에 대한 권한이 적절하지 않게 구성되었을 때, 불필요한 기능이 활성화 되거나 설치되었을 때, 기본계정 및 암호화가 변경되지 않았을 때, 지나치게 상세한 오류 메세지를 노출할 때

A06: Vulnerable and Outdated Components (취약하고 오래된 요소) 

- 지원이 종료되었거나 오래된 버전을 사용할 때 발생

- 애플리케이션 뿐만 아니라, DBMS, API 및 모든 구성요소 들이 포함

A07: Identification and Authentication Failures (식별 및 인증 오류)

- Broken Authentication(취약한 인증)이 identification failures(식별 실패)까지 포함하여 더 넓은 범위를 포함할 수 있도록 변경.

- 사용자의 신원확인, 인증 및 세션관리가 적절히 되지 않을 때 취약점이 발생 가능

A08: Software and Data Integrity Failures(소프트웨어 및 데이터 무결성 오류)

- 2021년 새로 등장한 카테고리

- 무결성을 확인하지 않고 소프트웨어 업데이트, 중요 데이터 및 CI/CD 파이프라인과 관련된 가정을 하는데 중점을 둠

A09: Security Logging and Monitoring Failures (보안 로깅 및 모니터링 실패)

- Insufficient Logging & Monitoring(불충분한 로깅 및 모니터링) 이 Security Logging and Monitoring Failures (보안 로깅 및 모니터링 실패)로 변경

- 로깅 및 모니터링 없이는 공격활동을 인지할 수 없음.

A10: Server-Side Request Forgery (서버 측 요청 위조)

- 2021년 새롭게 등장.

- SSRF는 웹 애플리케이션이 사용자가제공한 URL의 유효성을 검사하지 않고 원격 리소스를 가져올 때마다 발생.

- 공격자는 방화벽, VPN 또는 다른 유형의 네트워크 ACL(액세스 제어 목록)에 의해 보호되는 경우에도 응용 프로그램이 조작된 요청을 예기치 않은 대상으로 보내도록 강제할 수 있음.

+ Recent posts