OWASP 란?
OWASP(The Open Web Application Security Project)는 오픈소스 웹 애플리케이션 보안 프로젝트이다. 주로 웹에 관한 정보노출, 악성 파일 및 스크립트, 보안 취약점 등을 연구하며, 빈도수가 높고 보안상 영향을 크게 줄수있는 10가지 웹 애플리케이션의 취약점 "OWASP TOP 10"을 발표했다.
OWASP TOP10 목록은 3~4년에 한번씩 정기적으로 업데이트 된다.

- A01:2021-Broken Access Control(접근권한 취약점) : 접근 제어(Access Control)는 사용자가 권한을 벗어난 행동을 할 수 없도록 정책을 만들고 실행하는 기능입니다. 접근 제어가 취약하게 구현되면 사용자는 주어진 권한을 벗어나 인가되지 않은 데이터에 무단으로 접근해, 조작이나 삭제하는 등을 할 수 있습니다.
취약점 예시
●특정 사용자에게만 부여해야 하는 권한을 기본적으로 모든 사용자에 부여하는 경우
●인증되지 않은 사용자가 인증이 필요한 페이지를 강제로 탐색할 수 있는 경우
●사용자로 로그인해 관리자 권한으로 활동할 수 있는 경우
●POST, PUT, DELETE API 요청에 대한 접근 제어가 누락된 경우
●파라미터나 쿠키 등의 요청을 조작해 권한 상승 혹은 타 사용자의 권한을 사용할 수 있는 경우
- A02:2021-Cryptographic Failures(암호화 오류) : 기존에는 민감 데이터 노출(Sensitive Data Exposure)이라고 했었으나, 이번에 암호화 실패(Cryptographic Failures)로 명칭이 변경됐습니다. 2017년 대비 한 단계 상승해 두 번째 항목으로 선정됐습니다. 이 항목에서는 암호화와 관련된 전반적인 내용을 광범위하게 다루고 있습니다.
암호화에 오류가 있거나 미흡한 부분이 있는 경우, 민감 데이터 노출로 이어집니다. 특히 개인정보와 금융 데이터 같은 법과 규정에 강력하게 영향을 받는 경우라면 안전하게 보호하기 위한 추가 요구 사항을 지켜야 합니다. (국내의 경우 개인정보보호법, 정보통신망법, 신용정보법, ISMS-P 인증, ISO-27001 인증, 주요정보통신기반시설 취약점 분석평가,전자금융기반시설 취약점 분석평가 등이 있습니다.)
취약점 예시
●내·외부망에 관계없이 데이터가 전송구간에서 평문으로 전송되는 경우(HTTP, FTP, TELNET 등)
●취약한 암호화 프로토콜을 사용하는 경우(SSL v2.0, SSL v3.0, TLS v1.0, TLS v1.1)
●취약한 암호화 알고리즘을 사용하는 경우(DES, RC4, MD5 등)
●취약한 암호화 컴포넌트를 사용하는 경우(취약한 버전의 openssl 사용 등)
●보안 헤더 설정을 통한 HSTS가 누락된 경우(HSTS : HTTP를 HTTPS로 강제 리다이렉트)
●고정된 암호문을 사용하는 경우(Salt, 일회용 난수 미포함)
●사설 인증서 사용, 인증서와 도메인 불일치
●암호키 관리가 미흡한 경우(소스코드 하드코딩 등)
- A03:2021-Injection(인젝션) : 역사적으로 웹 애플리케이션 취약점 중 가장 많이 알려진 인젝션(Injection)이 세 번째 항목으로 선정됐습니다. 이번에 XSS(Cross-site Scripting)가 인젝션 항목에 포함되면서, 사용자 제공 데이터 조작을 통한 공격은 모두 인젝션 항목으로 통일됐습니다.
인젝션은 사용자가 전달하는 데이터(파라미터, 헤더, URL, 쿠키(Cookie), Json 데이터, SOAP, XML 등 모든 형태)를 신뢰할 수 없는 데이터로 조작해서, 서버 측에서 명령어나 쿼리문의 일부로 인식하게 만들 때 발생하는 취약점입니다.
취약점 예시
●SQL injection, NoSQL injection
●OS Command Injection
●ORM(Object Relational Mapping) injection
●LDAP injectionEL(Expression Language) injection
●OGNL(Object Graph Navigation Library) injection
●Cross-site Scripting
- A04:2021-Insecure Design(안전하지 않은 설계) : 안전하지 않은 설계(Insecure Design)는 새롭게 추가된 항목입니다. 코드 구현 단계에 앞서 기획과 설계 단계에서 발생하는 보안 결함을 의미합니다. 안전하지 않게 설계한 애플리케이션은 개발을 완료한 후에 코드를 수정해도 보안 결함을 완벽하게 방어하는데 한계가 있을 수밖에 없습니다. 그래서 설계 단계에서부터 보안성을 고려해야 합니다.
●요구사항 및 리소스 관리: 모든 데이터 자산과 예상되는 비즈니스 로직의 기밀성, 무결성 가용성 및 신뢰성에 관한 보안 요구사항을 포함하여 기획
●보안 설계: 알려진 공격 기법을 방지하기 위해 위협을 지속적으로 평가하고 코드가 안전하게 설계되고 테스트됐는지 확인하는 문화 및 방법론 적용
●보안 개발 생명 주기: 전체 프로젝트 및 소프트웨어 유지 관리의 전반에 걸쳐 프로젝트 시작 단계에서부터 보안 전문가의 검증 필요
- A05:2021-Security Misconfiguration(보안설정오류) : 보안 설정 오류(Security Misconfiguration)는 애플리케이션을 최초 설치하거나 업데이트할 때 보안성을 고려하지 않은 설정으로 인해 취약점이 발생하는 경우로, 설정과 관련된 모든 부분을 포함하고 있습니다. XXE(XML External Entity) 항목은 애플리케이션의 잘못된 보안 설정으로 인해 발생하는 취약점으로, 이번 개정으로 보안 설정 오류 항목에 병합됐습니다.
취약점 예시
●불필요한 기능을 활성화했거나 설치함(예: 불필요 포트, 불필요 페이지, 불필요 계정/권한 등)
●벤더사에서 기본으로 제공하는 관리자 계정(ID/Password)을 변경하지 않고 사용
●에러 페이지를 통한 애플리케이션 에러 정보 노출
●보안 헤더 설정 누락
●서버 OS, 프레임워크, 라이브러리, 데이터베이스 등의 보안 설정 누락
- A06:2021-Vulnerable and Outdated Components(취약하고 오래된 요소) : 취약하고 지원이 종료된 구성 요소(Vulnerable and Outdated Components)는 취약한 버전 또는 EOS/EOL/EOD(소프트웨어 기술 지원 중단) 상태인 소프트웨어를 계속 사용하는 경우를 뜻하며, 그로 인해 발생할 수 있는 모든 보안 위협을 포함하고 있습니다. 서비스를 구성하는 모든 요소(OS, WEB/WAS, 데이터베이스, 애플리케이션, API, 라이브러리, 프레임워크 등)가 여기에 해당됩니다.
취약점 예시
●지원 종료된 OS 사용(Windows XP, Windows server 2000 등)
●알려진 취약점이 존재하는 버전의 애플리케이션 사용(nginx, apache tomcat, 오픈소스 웹 에디터, WordPress 등)
●알려진 취약점이 존재하는 버전의 프레임워크 사용(Apache Struts 2, Spring 등)
●알려진 취약점이 존재하는 버전의 라이브러리 사용(OpenSSL 등)
- A07:2021-Identification and Authentication Failures(식별 및 인증 오류) : 2021년 개정으로 기존 취약한 인증(Broken Authentication) 항목에 식별 실패(Identification failures)를 포함시켜, 조금 더 넓은 의미인 식별 및 인증 실패(Identification and Authentication Failures) 항목으로 변경됐습니다. 사용자 신원 확인과 인증 및 세션 관리에 해당하는 항목으로 2017년 대비 5단계가 낮아져 7번째 항목으로 선정됐습니다만, 여전히 많이 발견되는 취약점입니다.
취약점 예시
●Multi-factor 인증이나 2차 인증 부재로 Credential Stuffing, Brute forcing 공격 등에 노출되는 경우
●인증실패에 대한 제한이 없어 Brute forcing 공격에 노출되는 경우
●안전한 비밀번호 생성 정책이 없어, 취약한 비밀번호 생성을 허용하는 경우
●URL에 인증 세션 ID가 노출되는 경우(GET Method)
●로그인 후 새로운 세션 ID로 발급하지 않고 기존 세션 ID를 재사용하는 경우
●세션 타임아웃이 없거나 로그아웃 후 세션 파기를 하지 않는 경우
- A08:2021-Software and Data Integrity Failures(소프트웨어 및 데이터 무결성 오류) : 소프트웨어 및 데이터 무결성 오류(Software and Data Integrity Failures)는 이번에 신설된 항목으로, 안전하지 않은 역직렬화(Insecure deserialization) 항목이 병합됐습니다. 소프트웨어 및 데이터 무결성 오류는 애플리케이션이 신뢰할 수 없는 소스, 저장소 및 CDN, 플러그인, 라이브러리, 모듈에 의존하는 경우에 발생합니다. 안전하지 않은 CI/CD 파이프라인은 개발 및 배포 과정에서 애플리케이션이 변조되면 무결성이 훼손될 가능성이 있으므로, 애플리케이션이 사용하는 코드에 대한 무결성 검증 절차를 추가해야 합니다.
취약점 예시
●애플리케이션이 사용하는 라이브러리나 모듈에 대한 무결성 검증이 없어 변조가 가능한 경우
●업데이트 공급망에 대한 검증이 없는 경우
●CI/CD 파이프라인에 대한 적절한 보안성 검토가 없는 경우
●직렬화된 데이터에 대한 무결성 검증이 없는 경우
- A09:2021-Security Logging and Monitoring Failures(보안 로깅 및 모니터링 실패) : 기존에는 불충분한 로깅 및 모니터링(Insufficient Logging & Monitoring) 항목이었으나, 이번 개정에서 보안 로깅 및 모니터링 실패(Security Logging and Monitoring Failures) 항목으로 변경됐습니다. 적절한 로깅과 모니터링이 없다면 공격을 감지하고 대응할 수가 없기 때문에, 취약점 공격 예방뿐 아니라 공격 발생 감지 및 대응까지 포함하는 것으로 개정됐습니다.
취약점 예시
●로그인, 인증 실패, 권한 설정 등 중요 기능 수행에 대한 로깅이 없는 경우
●일정 주기로 로그에 대한 백업 절차가 없는 경우
●로깅 및 모니터링이 필요한 부분을 명확하게 구분해서 로깅하지 않아, 불명확한 로깅 및 모니터링을 하는 경우
- A10:2021-Server-Side Request Forgery(서버측 요청 위조 , SSRF) : 서버 측 요청 변조(Server-Side Request Forgery, SSRF)는 2021년에 신설된 항목입니다. 애플리케이션이 사용자 제공 데이터를 적절한 검증 없이 로컬 및 원격 리소스를 가져와 취약점을 발생시키는 상황을 의미합니다. 공격자는 SSRF 취약점이 존재한는 애플리케이션에서 서버 권한과 신뢰 관계를 이용해, 서버가 조작된 요청을 수행하도록 강제할 수 있습니다.
취약점 예시
●서버가 적절한 검증 절차 없이 사용자 요청을 로컬 혹은 원격 리소스에 접근하도록 하는 경우
참고
'Web Hacking' 카테고리의 다른 글
HTTP/HTTPS (0) | 2022.07.04 |
---|
OWASP 란?
OWASP(The Open Web Application Security Project)는 오픈소스 웹 애플리케이션 보안 프로젝트이다. 주로 웹에 관한 정보노출, 악성 파일 및 스크립트, 보안 취약점 등을 연구하며, 빈도수가 높고 보안상 영향을 크게 줄수있는 10가지 웹 애플리케이션의 취약점 "OWASP TOP 10"을 발표했다.
OWASP TOP10 목록은 3~4년에 한번씩 정기적으로 업데이트 된다.

- A01:2021-Broken Access Control(접근권한 취약점) : 접근 제어(Access Control)는 사용자가 권한을 벗어난 행동을 할 수 없도록 정책을 만들고 실행하는 기능입니다. 접근 제어가 취약하게 구현되면 사용자는 주어진 권한을 벗어나 인가되지 않은 데이터에 무단으로 접근해, 조작이나 삭제하는 등을 할 수 있습니다.
취약점 예시
●특정 사용자에게만 부여해야 하는 권한을 기본적으로 모든 사용자에 부여하는 경우
●인증되지 않은 사용자가 인증이 필요한 페이지를 강제로 탐색할 수 있는 경우
●사용자로 로그인해 관리자 권한으로 활동할 수 있는 경우
●POST, PUT, DELETE API 요청에 대한 접근 제어가 누락된 경우
●파라미터나 쿠키 등의 요청을 조작해 권한 상승 혹은 타 사용자의 권한을 사용할 수 있는 경우
- A02:2021-Cryptographic Failures(암호화 오류) : 기존에는 민감 데이터 노출(Sensitive Data Exposure)이라고 했었으나, 이번에 암호화 실패(Cryptographic Failures)로 명칭이 변경됐습니다. 2017년 대비 한 단계 상승해 두 번째 항목으로 선정됐습니다. 이 항목에서는 암호화와 관련된 전반적인 내용을 광범위하게 다루고 있습니다.
암호화에 오류가 있거나 미흡한 부분이 있는 경우, 민감 데이터 노출로 이어집니다. 특히 개인정보와 금융 데이터 같은 법과 규정에 강력하게 영향을 받는 경우라면 안전하게 보호하기 위한 추가 요구 사항을 지켜야 합니다. (국내의 경우 개인정보보호법, 정보통신망법, 신용정보법, ISMS-P 인증, ISO-27001 인증, 주요정보통신기반시설 취약점 분석평가,전자금융기반시설 취약점 분석평가 등이 있습니다.)
취약점 예시
●내·외부망에 관계없이 데이터가 전송구간에서 평문으로 전송되는 경우(HTTP, FTP, TELNET 등)
●취약한 암호화 프로토콜을 사용하는 경우(SSL v2.0, SSL v3.0, TLS v1.0, TLS v1.1)
●취약한 암호화 알고리즘을 사용하는 경우(DES, RC4, MD5 등)
●취약한 암호화 컴포넌트를 사용하는 경우(취약한 버전의 openssl 사용 등)
●보안 헤더 설정을 통한 HSTS가 누락된 경우(HSTS : HTTP를 HTTPS로 강제 리다이렉트)
●고정된 암호문을 사용하는 경우(Salt, 일회용 난수 미포함)
●사설 인증서 사용, 인증서와 도메인 불일치
●암호키 관리가 미흡한 경우(소스코드 하드코딩 등)
- A03:2021-Injection(인젝션) : 역사적으로 웹 애플리케이션 취약점 중 가장 많이 알려진 인젝션(Injection)이 세 번째 항목으로 선정됐습니다. 이번에 XSS(Cross-site Scripting)가 인젝션 항목에 포함되면서, 사용자 제공 데이터 조작을 통한 공격은 모두 인젝션 항목으로 통일됐습니다.
인젝션은 사용자가 전달하는 데이터(파라미터, 헤더, URL, 쿠키(Cookie), Json 데이터, SOAP, XML 등 모든 형태)를 신뢰할 수 없는 데이터로 조작해서, 서버 측에서 명령어나 쿼리문의 일부로 인식하게 만들 때 발생하는 취약점입니다.
취약점 예시
●SQL injection, NoSQL injection
●OS Command Injection
●ORM(Object Relational Mapping) injection
●LDAP injectionEL(Expression Language) injection
●OGNL(Object Graph Navigation Library) injection
●Cross-site Scripting
- A04:2021-Insecure Design(안전하지 않은 설계) : 안전하지 않은 설계(Insecure Design)는 새롭게 추가된 항목입니다. 코드 구현 단계에 앞서 기획과 설계 단계에서 발생하는 보안 결함을 의미합니다. 안전하지 않게 설계한 애플리케이션은 개발을 완료한 후에 코드를 수정해도 보안 결함을 완벽하게 방어하는데 한계가 있을 수밖에 없습니다. 그래서 설계 단계에서부터 보안성을 고려해야 합니다.
●요구사항 및 리소스 관리: 모든 데이터 자산과 예상되는 비즈니스 로직의 기밀성, 무결성 가용성 및 신뢰성에 관한 보안 요구사항을 포함하여 기획
●보안 설계: 알려진 공격 기법을 방지하기 위해 위협을 지속적으로 평가하고 코드가 안전하게 설계되고 테스트됐는지 확인하는 문화 및 방법론 적용
●보안 개발 생명 주기: 전체 프로젝트 및 소프트웨어 유지 관리의 전반에 걸쳐 프로젝트 시작 단계에서부터 보안 전문가의 검증 필요
- A05:2021-Security Misconfiguration(보안설정오류) : 보안 설정 오류(Security Misconfiguration)는 애플리케이션을 최초 설치하거나 업데이트할 때 보안성을 고려하지 않은 설정으로 인해 취약점이 발생하는 경우로, 설정과 관련된 모든 부분을 포함하고 있습니다. XXE(XML External Entity) 항목은 애플리케이션의 잘못된 보안 설정으로 인해 발생하는 취약점으로, 이번 개정으로 보안 설정 오류 항목에 병합됐습니다.
취약점 예시
●불필요한 기능을 활성화했거나 설치함(예: 불필요 포트, 불필요 페이지, 불필요 계정/권한 등)
●벤더사에서 기본으로 제공하는 관리자 계정(ID/Password)을 변경하지 않고 사용
●에러 페이지를 통한 애플리케이션 에러 정보 노출
●보안 헤더 설정 누락
●서버 OS, 프레임워크, 라이브러리, 데이터베이스 등의 보안 설정 누락
- A06:2021-Vulnerable and Outdated Components(취약하고 오래된 요소) : 취약하고 지원이 종료된 구성 요소(Vulnerable and Outdated Components)는 취약한 버전 또는 EOS/EOL/EOD(소프트웨어 기술 지원 중단) 상태인 소프트웨어를 계속 사용하는 경우를 뜻하며, 그로 인해 발생할 수 있는 모든 보안 위협을 포함하고 있습니다. 서비스를 구성하는 모든 요소(OS, WEB/WAS, 데이터베이스, 애플리케이션, API, 라이브러리, 프레임워크 등)가 여기에 해당됩니다.
취약점 예시
●지원 종료된 OS 사용(Windows XP, Windows server 2000 등)
●알려진 취약점이 존재하는 버전의 애플리케이션 사용(nginx, apache tomcat, 오픈소스 웹 에디터, WordPress 등)
●알려진 취약점이 존재하는 버전의 프레임워크 사용(Apache Struts 2, Spring 등)
●알려진 취약점이 존재하는 버전의 라이브러리 사용(OpenSSL 등)
- A07:2021-Identification and Authentication Failures(식별 및 인증 오류) : 2021년 개정으로 기존 취약한 인증(Broken Authentication) 항목에 식별 실패(Identification failures)를 포함시켜, 조금 더 넓은 의미인 식별 및 인증 실패(Identification and Authentication Failures) 항목으로 변경됐습니다. 사용자 신원 확인과 인증 및 세션 관리에 해당하는 항목으로 2017년 대비 5단계가 낮아져 7번째 항목으로 선정됐습니다만, 여전히 많이 발견되는 취약점입니다.
취약점 예시
●Multi-factor 인증이나 2차 인증 부재로 Credential Stuffing, Brute forcing 공격 등에 노출되는 경우
●인증실패에 대한 제한이 없어 Brute forcing 공격에 노출되는 경우
●안전한 비밀번호 생성 정책이 없어, 취약한 비밀번호 생성을 허용하는 경우
●URL에 인증 세션 ID가 노출되는 경우(GET Method)
●로그인 후 새로운 세션 ID로 발급하지 않고 기존 세션 ID를 재사용하는 경우
●세션 타임아웃이 없거나 로그아웃 후 세션 파기를 하지 않는 경우
- A08:2021-Software and Data Integrity Failures(소프트웨어 및 데이터 무결성 오류) : 소프트웨어 및 데이터 무결성 오류(Software and Data Integrity Failures)는 이번에 신설된 항목으로, 안전하지 않은 역직렬화(Insecure deserialization) 항목이 병합됐습니다. 소프트웨어 및 데이터 무결성 오류는 애플리케이션이 신뢰할 수 없는 소스, 저장소 및 CDN, 플러그인, 라이브러리, 모듈에 의존하는 경우에 발생합니다. 안전하지 않은 CI/CD 파이프라인은 개발 및 배포 과정에서 애플리케이션이 변조되면 무결성이 훼손될 가능성이 있으므로, 애플리케이션이 사용하는 코드에 대한 무결성 검증 절차를 추가해야 합니다.
취약점 예시
●애플리케이션이 사용하는 라이브러리나 모듈에 대한 무결성 검증이 없어 변조가 가능한 경우
●업데이트 공급망에 대한 검증이 없는 경우
●CI/CD 파이프라인에 대한 적절한 보안성 검토가 없는 경우
●직렬화된 데이터에 대한 무결성 검증이 없는 경우
- A09:2021-Security Logging and Monitoring Failures(보안 로깅 및 모니터링 실패) : 기존에는 불충분한 로깅 및 모니터링(Insufficient Logging & Monitoring) 항목이었으나, 이번 개정에서 보안 로깅 및 모니터링 실패(Security Logging and Monitoring Failures) 항목으로 변경됐습니다. 적절한 로깅과 모니터링이 없다면 공격을 감지하고 대응할 수가 없기 때문에, 취약점 공격 예방뿐 아니라 공격 발생 감지 및 대응까지 포함하는 것으로 개정됐습니다.
취약점 예시
●로그인, 인증 실패, 권한 설정 등 중요 기능 수행에 대한 로깅이 없는 경우
●일정 주기로 로그에 대한 백업 절차가 없는 경우
●로깅 및 모니터링이 필요한 부분을 명확하게 구분해서 로깅하지 않아, 불명확한 로깅 및 모니터링을 하는 경우
- A10:2021-Server-Side Request Forgery(서버측 요청 위조 , SSRF) : 서버 측 요청 변조(Server-Side Request Forgery, SSRF)는 2021년에 신설된 항목입니다. 애플리케이션이 사용자 제공 데이터를 적절한 검증 없이 로컬 및 원격 리소스를 가져와 취약점을 발생시키는 상황을 의미합니다. 공격자는 SSRF 취약점이 존재한는 애플리케이션에서 서버 권한과 신뢰 관계를 이용해, 서버가 조작된 요청을 수행하도록 강제할 수 있습니다.
취약점 예시
●서버가 적절한 검증 절차 없이 사용자 요청을 로컬 혹은 원격 리소스에 접근하도록 하는 경우
참고
'Web Hacking' 카테고리의 다른 글
HTTP/HTTPS (0) | 2022.07.04 |
---|