OWASP(Open Web Application Security Project)는 비영리 보안 프로젝트 재단을 통징하는 약자로, 애플리케이션에서 발생하는 취약점을 분석하고 연구한다.
OWASP에서는 3~4년에 걸쳐 애플리케이션의 취약점과 공격 가능성, 기술적 영향을 기준으로 순위를 매겨 상위 10개 OWASP Top 10으로 선정한다. 국내외 여러 기관에서 보안성 검토 기준을 수립할 때 이 OWASP Top 10을 기준으로 많이 세운다고 한다. 현재 2023년도 기준으로, 2021년도의 정책이 가장 최신 업데이트이며 10개를 중요도순으로 살펴보도록 하자.
1. Broken Access Control(취약한 접근 제어): 접근 제어는 사용자가 의도한 권한 범위를 벗어나 행동하지 못하도록 정책을 시행하는 것을 의미한다. 실패 시, 일반적으로 권한 없는 정보 노출, 수정 또는 데이터 파괴, 또는 사용자 권한을 벗어나 비즈니스 기능 수행이 발생할 수 있습니다. 다음 예시들이 있다 주요 Common Weakness Enumerations (CWE)와 일반적인 접근 제어 취약점은 다음과 같다.
CWE-200: 미승인된 사용자에게 민감한 정보 노출
CWE-201: 민감한 정보 삽입을 통한 전송 데이터
CWE-352: 크로스사이트 요청 위조(CSRF로 공격자가 사용자의 권한을 가로채기 위해 사용자가 아무것도 모르는 채로 악의적인 요청을 서버로 보내는 상황이다.)
최소 권한 원칙 거부: 특정 기능, 역할 또는 사용자에게만 액세스를 허용해야 하지만 누구나 액세스할 수 있는 상태인 경우.(사용자 검증에 세션/토큰 대신 리퀘스트 헤더, 파라미터를 이용 등..)
고유 식별자를 제공하여 다른 사람의 계정 보기 또는 편집(보안이 떨어지는 직접 객체 참조>http://api-server-data/user-info?userId=101
에서 101을 114로 바꿔 유저의 계정정보 확인 등..)
POST, PUT 및 DELETE에 대한 액세스 제어 누락인 API에 액세스해서 웹 애플리케이션에서 권한 없이 중요한 작업을 수행. (타 사용자가 작성한 게시물의 수정/삭제 수행 등..)
해결 방법은 사용자의 역할에 대해 최소한의 권한만 부여하고 나머지를 거부하고, 직접 참조대신 간접참조를 통해 데이터에 접근한다. 또한 인증된 사용자만 API를 호출할 수 있도록 권한을 확인(세션or 토큰)하여 문제 해결이 가능하다.
2. Cryptographic Failures(암호화 실패): 암호화 실패 문제가 생기면 민감한 데이터가 노출되며, 주요 CWE로는 다음과 같다.
3. Injection(인젝션): 순위가 1위에서 내려간 인젝션은 사용자가 전달하는 데이터를 신뢰할 수 없는 데이터로 조작해서, 서버 측에서 명령이나 쿼리문의 일부로 인식하게 만들 때 발생하는 취약점이다. 주요 CWE로는 다음과 같다.
4. Insecure Design(안전하지 않은 설계): 설계 및 아키텍처의 결함에 대한 이야기인데, 위협이 되는 모델링을 피하고 안전한 설계 패턴과 아키텍처를 참조해야 한다. 주요 CWE는 다음과 같다.
5. Security Misconfiguration(보안 구성 오류):
애플리케이션 각 스택 별 적절한 보안 강화가 누락되거나 클라우드 서비스에서 권한이 부적절하게 구성되면 애플리케이션이 취약할 수 있다. 주요 CWE는 다음과 같다.
6. Vulnerable and Outdated Components(취약하고 오래된 구성 요소): 소프트웨어나 시스템에서 사용되는 컴포넌트(OS, 데이터베이스, 라이브러리, 패키지, 프레임워크 등 / windows XP, apache tomcat, OpenSSL)가 취약점이나 오래된 버전을 가지고 있어 보안에 취약한 상태를 나타낸다.
7. Identification and Authentication Failures(식별 및 인증 실패): 안전한 비밀번호 생성 정책이 없어, 취약한 비밀번호를 생성하거나 URL에 인증세션 ID가 노출 되는, 로그아웃 후 세션 파기를 하지 않는 경우들이 포함된다.
8. Software and Data Integrity Failures(소프트웨어 및 데이터 무결성 실패): 소프트웨어나 데이터가 변경되거나 손상될 때 발생하는 문제로 애플리케이션이 라이브러리, 모듈에 대한 무결성 검증 및 업데이트 공급망에 대한 검증이 필요하다.
9. Security Logging and Monitoring Failures(보안 로깅 및 모니터링 실패): 보안에서 로깅과 모니터링 시스템의 실패 또는 부족함을 나타내며, 제대로 동작하지 않으면 위협 식별 및 대응이 어려워진다.
10. Server-Side Request Forgery(SSRF, 서버 측 요청 변조): 서버에서 요청을 충분히 검증하거나 제한하지 않아, 공격자가 서버 측에서 발생하는 요청을 악의적으로 조작하거나 제한 없이 수행 하는 공격기법