보안성 검토 방법 OWASP

JACKJACK·2023년 9월 7일
1
post-thumbnail

OWASP란?

OWASP(Open Web Application Security Project)는 비영리 보안 프로젝트 재단을 통징하는 약자로, 애플리케이션에서 발생하는 취약점을 분석하고 연구한다.

OWASP에서는 3~4년에 걸쳐 애플리케이션의 취약점과 공격 가능성, 기술적 영향을 기준으로 순위를 매겨 상위 10개 OWASP Top 10으로 선정한다. 국내외 여러 기관에서 보안성 검토 기준을 수립할 때 이 OWASP Top 10을 기준으로 많이 세운다고 한다. 현재 2023년도 기준으로, 2021년도의 정책이 가장 최신 업데이트이며 10개를 중요도순으로 살펴보도록 하자.


OWASP Top 10 (2021 updated)

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로는 다음과 같다.

  • CWE-259: 하드 코딩된 비밀번호 사용(패스워드를 하드코딩해 저장할 경우 구성파일에서 공격자가 확인 가능),
  • CWE-327: 취약한 또는 위험한 암호 알고리즘 사용(DES사용 시 취약)
  • CWE-331: 엔트로피 부족(암호화의 난수생성에 충분한 엔트로피가 없으면 난수로만든 인증토큰이 예측 가능해져 문제가 발생)
    해결 방법은 민감한 데이터가 무엇인지 파악하고 평문으로 전송되는 데이터 트래픽을 감지해 TLS 등의 프로토콜을 사용해 암호화 시켜준다. 지금은 사용하지 않는 해시함수/알고리즘/프로코톨이 사용되고 있지 않은지 수시로 확인해주고 단순한 암호화가 아닌 인증된 암호화를 사용해야한다.

3. Injection(인젝션): 순위가 1위에서 내려간 인젝션은 사용자가 전달하는 데이터를 신뢰할 수 없는 데이터로 조작해서, 서버 측에서 명령이나 쿼리문의 일부로 인식하게 만들 때 발생하는 취약점이다. 주요 CWE로는 다음과 같다.

  • CWE-79: 크로스 사이트 스크립팅(XSS로 공격자가 삽입한 악성 스크립트가 웹 서버에 저장되어 다른 사용자가 실행하게 된다.)
  • CWE-89: SQL 인젝션(악의적인 SQL 쿼리를 주입하여 데이터베이스 무단 엑세스 및 손상을 초래)
  • CWE-73: 파일 이름 또는 경로의 외부 제어(애플리케이션에서 파일 이름 또는 경로를 사용하는 경우, 외부 공격자가 파일 이름 또는 경로를 조작해 악의적인 파일에 액세스하거나 실행을 시도)
    해결 방법은 소스코드 검토해 인젝션에 취약한지 여부를 감지해야하며 입력값 유효 검사, CSP 등을 설정해주고 모든 데이터 입력에 보안 테스트를 실행해주면 좋다. 또한 ORM을 통해 파리미터화 된 쿼리를 사용해 인젝션을 주로 방지한다고 한다.

4. Insecure Design(안전하지 않은 설계): 설계 및 아키텍처의 결함에 대한 이야기인데, 위협이 되는 모델링을 피하고 안전한 설계 패턴과 아키텍처를 참조해야 한다. 주요 CWE는 다음과 같다.

  • CWE-209: 민감한 정보를 포함하는 오류 메시지 생성(공격자가 추가정보를 얻거나 공격을 수행하기 위한 정보를 얻을 수 있게 된다.)
  • CWE-256: 보호되지 않은 자격증명의 저장(사용자나 시스템이 자격 증명을 저장할 때 보호 메커니즘이 부족한 경우 공격자가 이를 이용)
  • CWE-501: 신뢰 경계 위반(시스템에서 신뢰 경계를 적절하게 관리하지 않을 때 발생할 수 있는 문제로 신뢰하지않는 데이터가 데이터베이스에 들어가게 된다.)
  • CWE-522: 충분히 보호되지 않은 자격 증명이 포함됩니다.(자격증명을 평문으로 저장하거나 암호화 되지 않은 상태로 저장하는 경우)
    해결 방법은 오류메세지에 민감한 정보를 포함하지 않아야하며, 안전한 해시 알고리즘과 Salt를 사용해 자격증명을 저장해야한다. 시스템에서는 신뢰경계를 적절히 관리해 데이터를 신뢰/신뢰하지 않는 영역을 나누고, 자격증명을 안전하게 저장/관리 해야한다.

5. Security Misconfiguration(보안 구성 오류):
애플리케이션 각 스택 별 적절한 보안 강화가 누락되거나 클라우드 서비스에서 권한이 부적절하게 구성되면 애플리케이션이 취약할 수 있다. 주요 CWE는 다음과 같다.

  • CWE-16 구성(부적절한 설정, 설정 오류 또는 설정 관련 문제로 인해 시스템 또는 소프트웨어에서 보안 문제가 발생할 수 있는 모든 상황)
  • CWE-611 XML 외부 엔터티 참조의 부적절한 제한(공격자가 애플리케이션에 대한 XML 입력을 조작하여 외부 엔터티를 참조하도록 설계된 악의적인 XML을 제출해 서버에서 외부 엔터티 로드를 유도)
    해결방법으로는 애플리케이션 및 서버 구성을 정기적으로 검토하고, 최소한의 권한과 최신 보안 설정을 적용하여 불필요한 기능 및 권한을 비활성화해야 한다. (기본 계정 및 암호를 변경 등..)

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, 서버 측 요청 변조): 서버에서 요청을 충분히 검증하거나 제한하지 않아, 공격자가 서버 측에서 발생하는 요청을 악의적으로 조작하거나 제한 없이 수행 하는 공격기법


Reference

profile
러닝커브를 빠르게 높이자🎢

0개의 댓글