OWASP TOP 10(2021)
OWASP는 웹 애플리케이션에서 중요한 취약점을 식별하고 순위를 매기는 기관이다.
해당 사이트에서는 주기적으로 상위 10개의 취약점을 팔요하며, 해당 목록을 보면서 취약점들을 보고 예방법을 나열해본다.
각 항목의 예시와 예측방법 일부분만 발췌를 했고 예방법에 대한 상세 방법은 cheat sheet 참조
- A01:2021-취약한 접근 제어(Broken Access Control)
- 적절한 접근 제어가 부재하거나 잘못 구성되어, 권한이 없는 사용자가 민감한 데이터에 접근하거나 기능을 수행할 수 있는 취약점
- 예시:
- 다른 사용자 계정을 조회하고 수정하는 행위
- 특정 유저의 권한 격상. 로그인 하지 않고 유저 역할 또는 관리자 역할로 격상되는 행동
- CORS 설정이 잘못 되어있어 다른 출처로부터의 접근 허용
- 예방법: 접근 제어는 공격자가 접근 제어 검사 또는 메타데이터를 수정할 수 없는 신뢰할 수 있는 서버 측 코드 또는 서버리스 API에서만 효과적
- public resource를 제외하고 기본적으로 접근 거절로 설정
- 접근 제어 실패를 기록하고 적절한 경우 관리자에게 알람 설정
- A02:2021-암호화 실패(Cryptographic Failures)
- 민감한 데이터의 보호를 위한 암호화가 부적절하거나 부재하여 데이터 노출이나 시스템 손상이 발생할 수 있는 취약점
- 예시:
- 오래되거나 취약한 암호화 알고리즘 또는 프로토콜 사용
- HTTP, SMTP, FTP 통신 시 암호화되지 않은 평문 데이터(clear text)
- 예방법:
- 저장되는 중요 데이터들은 모두 암호화 처리
- 레거시 프로토콜 사용 지양
- 단순 암호화보다 인증된 암호화를 사용
- 인증된 암호화 VS (단순)암호화(출처1, 출처2)
| 특징 | 단순 암호화(Encryption) | 인증된 암호화(Authenticated Encryption) |
|---|
| 기밀성(Confidentiality) | ✓ | ✓ |
| 무결성(Integrity) | ✗ | ✓ |
| 출처 신뢰(Identification) | ✗ | ✓ |
| 변조 탐지 | ✗ | ✓ |
- 단순 암호화는 데이터를 암호화 시키지만 인증화(Authentication)은 사용자의 정보 인증까지 같이 해주기에 해당 데이터가 도중에 변형되지 않았고 원하는 상대방으로부터 받은 지 확인할 수 있음
- A03:2021-인젝션(Injection):
- SQL, NoSQL, OS 명령어 등 외부 입력이 제대로 검증되지 않아 코드나 쿼리에 삽입되어 실행되는 취약점
- 예시:
- 유저가 제공한 데이터를 검증, 필터링, sanitze하지 않음
- 예방법:
- A04:2021-안전하지 않은 설계(Insecure Design)
- 보안 고려 없이 설계된 시스템으로 인해 발생하는 취약점으로, 위협 모델링이나 보안 패턴의 부재로 인해 발생
- 예시:
- 예방법:
- 단위 또는 통합 테스트를 작성하여 중요한 로직이 위협에 내성이 있는 지 테스트
- 안전한 디자인 패턴을 사용하는 라이브러리를 사용하거나 구축
- A05:2021-보안 설정 오류(Security Misconfiguration)
- 안전하지 않은 기본 설정, 불필요한 기능 활성화, 잘못된 권한 설정 등으로 인해 발생하는 취약점
- 예시:
- 불필요한 기능이 활성 또는 설치(포트, 페이지, 계정)
- 최신 보안 패치가 적용되지 않거나 제대로 설정이 되지 않은 상황
- 애플리케이션 또는 서버에서 보안값 설정 누락
- 예방법:
- 불필요한 기능 제거(포트, 페이지, 계정)
- 클라이언트에서 전송 시 security header 설정
- Content-Security-Policy (CSP): 스크립트 출처를 제한.
- X-Frame-Options: 클릭재킹(clickjacking) 방지.
- A06:2021-취약하거나 오래된 컴포넌트(Vulnerable and Outdated Components)
- 알려진 취약점이 있는 라이브러리나 프레임워크를 사용하는 경우 발생하는 취약점
- 예시:
- 서버 또는 클라이언트에서 사용되는 컴포넌트들의 버전이 낮은 상황
- 구성요소(라이브러리) 간의 호환성을 테스트하지 않는 경우
- 예방법:
- 사용하지 않는 구성요소들 제거
- 주기적으로 사용하는 컴포넌트들의 버전 체크
- 안전한 링크를 통해 공식 사이트에서 얻은 컴포넌트
- A07:2021-식별 및 인증 실패(Identification and Authentication Failures)
- 사용자 인증 및 세션 관리의 실패로 인해 발생하는 취약점
- 예시:
- 약하면서 잘 알려진 암호 허용(Password1, admin 등등)
- 없거나 효과 없는 multi-factor 인증
- 유저 세션 정보를 URL에 포함하는 행위
- 예방법:
- 안전하고 효과적인 multi-factor 인증 도입
- 암호 체크리스트를 이용하여 약한 암호들 검증
- 실패한 로그인 시도를 제한 또는 지연
- A08:2021-소프트웨어 및 데이터 무결성 실패(Software and Data Integrity Failures)
- 소프트웨어 업데이트, 중요 데이터, CI/CD 파이프라인의 무결성을 검증하지 않아 발생하는 취약점
- 예시:
- 신뢰하지 못할 출처, 저장소, CDN에 있는 플러그인, 라이브러리, 모듈에 의존하는 애플리게이션
- 자동 업데이트. 자동 업데이트로 인하여 프로젝트의 무결성을 확인하지 않기 때문에.
- 예방법:
- 디지털 서명 또는 비슷한 방식으로 소프트웨어나 데이터의 신뢰성 검증
- 신뢰할만한 저장소에서 라이브러리 사용
- 리뷰 절차를 도입하여 악의적인 코드 또는 취약점을 점검
- A09:2021-보안 로깅 및 모니터링 실패(Security Logging and Monitoring Failures)
- 보안 이벤트에 대한 로깅과 모니터링이 부족하여 공격을 탐지하지 못하는 취약점
- 예시:
- 로그인, 로그인 실패, 고가치 통신을 기록하지 않음
- 의심스러운 활동을 모니터링 또는 기록하지 않음
- 실시간 공격에 대해서 감지 또는 알림
- 예방법:
- 로그인, 서버 검증 실패, 접근 시도, 의심스러운 활동을 기록
- 로그 관리 솔루션에서 쉽게 사용할 수 있도록 로그 생성
- DevSecOps 팀을 구성하여 의심스러운 활동이 감지되면 신속하게 대응할 수 있는 모니터링 및 알림 구축
- A10:2021-서버 측 요청 위조(Server-Side Request Forgery, SSRF)
- 서버가 외부 자원을 요청할 때 사용자 입력을 검증하지 않아 발생하는 취약점
- 예시:
- 유저가 입력한 URL을 검증하지 않고 remote resource fetching
- 예방법:
- 서버작업
- SSRF의 영향을 줄이기 위해 remote resource의 접근을 별도의 네트워크 세그먼트로 분리
- 애플리케이션 작업
- input data를 검증(validation) 및 sanitize
- HTTP redirection 방지
- (URL consistency)애플리케이션이 요청하는 URL과 해당 IP 주소가 일관되게 유지되도록 주의.
- 예를 들어, DNS Rebinding과 같은 공격은 URL과 IP 매핑의 일관성을 깨뜨려 악의적인 리소스에 접근하게 할 수 있음
- DNS Rebinding이란?
- 공격자가 외부 URL을 입력해 초기 요청은 합법적인 도메인(IP 주소)으로 전송.
- 이후 공격자가 DNS Rebinding을 통해 내부 네트워크 자원(예: 192.168.1.1)에 접근.
만약 각 항목에서 프론트엔드 또는 서버가 할 수 있는 것이 궁금하다면 [Velog-hongchee.log]OWASP TOP10 취약점글을 확인해보면 좋다.