API보안을 지키기 위한 OWASP TOP 10

권태형·2023년 1월 8일
0

지식정리

목록 보기
2/72
post-thumbnail

OWASP TOP 10에 대해 알아보자!

OWASP TOP 10 이란 무엇일까

Open Web Application Security Project 의 줄임말로 '오픈소스 웹 어플리케이션 보안 프로젝트'이다.

이 프로젝트는 주로 웹에 관한 정보노출, 악성 파일 및 스크립트, 보안 취약점 등을 연구하며 3~4년 간격으로 10대 웹 어플리케이션의 취약점을 선정한다.
즉 웹 어플리케이션의 취약점들 중에 빈도가 많이 발생하고, 보안상 영향을 크게 줄 수 있는 약점들의 순위를 결정하여 10개를 보여준다는 것이다.

가장 최근에 나온 OWASP TOP10은 2021년에 결정된 목록이다.

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

이것은 웹 애플리케이션이 액세스 제어를 적절하게 시행하지 않아 승인되지 않은 사용자가 애플리케이션의 민감한 영역에 액세스할 수 있도록 허용할 때 발생합니다. 엑세스 제어는 사용자가 권한을 벗어나 행동할 수 없도록 정책을 시행합니다. 만약 엑세스 제어가 취약하면 사용자는 주어진 권한을 벗어나 모든 데이터를 무단으로 열람, 수정 혹은 삭제 등의 행위로 이어질 수 있습니다.

이 취약점을 방지하려면 역할 기반 액세스 제어 사용과 같은 강력한 액세스 제어 조치를 구현하고 무단 액세스를 차단하도록 웹 서버를 적절하게 구성해야 한다.

A02 : Cryptographic Failures (암호화 오류)

웹 애플리케이션이 취약한 알고리즘을 사용하거나 키를 적절하게 보호하지 못하는 등 암호화를 제대로 사용하지 않을 때 발생합니다.
적절한 암호화가 이루어지지 않으면 민감 데이터가 노출될 수 있습니다.

암호화 실패를 방지하려면 강력한 암호화 알고리즘을 사용하고 키를 적절하게 관리하고 보호해야 한다.

A03: Injection (인젝션)

공격자가 취약한 웹 애플리케이션에 임의의 코드를 주입하여 실행할 수 있을 때 발생합니다.
SQL, NoSQL, OS 명령, ORM(Object Relational Mapping), LDAP, EL(Expression Language) 또는 OGNL(Object Graph Navigation Library) 인젝션 취약점은 신뢰할 수 없는 데이터가 명령어나 쿼리문의 일부분으로써, 인터프리터로 보내질 때 취약점이 발생합니다.

인젝션 공격을 방지하려면 매개변수화된 쿼리를 사용하고 모든 사용자 입력을 삭제하고 허용 가능한 입력 값의 화이트리스트를 사용해야 한다.

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

이것은 공격에 취약하게 만드는 웹 응용 프로그램의 전반적인 설계의 약점을 나타냅니다.
Insecure Design(안전하지 않은 설계)는 누락되거나 비효율적인 제어 설계로 표현되는 다양한 취약점을 나타내는 카테고리 입니다.
안전하지 않은 설계와 안전하지 않은 구현에는 차이가 있지만, 안전하지 않은 설계에서 취약점으로 이어지는 구현 결함이 있을 수 있습니다.

안전하지 않은 설계를 방지하려면 보안 설계 원칙을 따르고 배포 전에 애플리케이션의 취약성을 철저히 테스트해야 한다

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

웹 애플리케이션이 제대로 구성되지 않아 공격에 노출될 수 있을 때 발생합니다.
애플리케이션 스택의 적절한 보안 강화가 누락되었거나 클라우드 서비스에 대한 권한이 적절하지 않게 구성되었을 때, 불필요한 기능이 활성화 되거나 설치되었을 때, 기본계정 및 암호화가 변경되지 않았을 때, 지나치게 상세한 오류 메세지를 노출할 때, 최신 보안기능이 비활성화 되거나 안전하지 않게 구성되었을 때 발생합니다.

잘못된 보안 구성을 방지하려면 보안 구성 모범 사례를 따르고 시스템을 정기적으로 업데이트 및 패치하고 애플리케이션의 민감한 영역에 대한 액세스를 제한해야 한다.

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

취약하고 오래된 요소는 지원이 종료되었거나 오래된 버전을 사용할 때 발생합니다. 이는 애플리케이션 뿐만 아니라, DBMS, API 및 모든 구성요소 들이 포함됩니다. 이는 웹 애플리케이션이 공격자가 악용할 수 있는 알려진 취약성이 있는 타사 구성 요소를 사용할 때 발생합니다.

이러한 유형의 취약성을 방지하려면 애플리케이션에서 알려진 취약성을 정기적으로 검사하고 취약한 구성 요소를 업데이트하거나 교체해야 한다.

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

이것은 웹 애플리케이션이 인증 및 세션 관리를 처리하는 방식의 약점을 나타냅니다.
사용자의 신원확인, 인증 및 세션관리가 적절히 되지 않을 때 취약점이 발생할 수 있습니다.

이러한 유형의 공격을 방지하려면 강력한 암호를 사용하고 보안 쿠키 사용 및 세션 토큰 회전과 같은 적절한 세션 관리 제어를 구현해야 한다.

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

웹 애플리케이션이 암호나 신용 카드 번호와 같은 민감한 데이터를 제대로 보호하지 않을 때 발생합니다.
무결성을 확인하지 않고 소프트웨어 업데이트, 중요 데이터 및 CI/CD 파이프라인과 관련된 가정을 하는데 중점을 둡니다.

민감한 데이터 노출을 방지하려면 전송 중이거나 저장된 모든 민감한 데이터를 암호화하고 HTTPS와 같은 보안 프로토콜을 사용해야 한다.

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

웹 애플리케이션이 보안 이벤트를 적절하게 로깅 및 모니터링하지 않을 때 발생합니다.
로깅 및 모니터링 없이는 공격활동을 인지할 수 없습니다. 이 카테고리는 진행중인 공격을 감지 및 대응하는데 도움이 됩니다.

이 취약성을 방지하려면 강력한 로깅 및 모니터링 시스템을 구현하고 정기적으로 로그 파일을 검토하여 공격 또는 기타 보안 문제의 증거를 찾아야 한다.

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

이는 공격자가 웹 애플리케이션을 속여 다른 시스템에 의도하지 않은 요청을 하도록 하여 잠재적으로 중요한 정보를 노출할 때 발생합니다.
SSRF 결함은 웹 애플리케이션이 사용자가 제공한 URL의 유효성을 검사하지 않고 원격 리소스를 가져올 때마다 발생합니다. 이를 통해 공격자는 방화벽, VPN 또는 다른 유형의 네트워크 ACL(액세스 제어 목록)에 의해 보호되는 경우에도 응용 프로그램이 조작된 요청을 예기치 않은 대상으로 보내도록 강제할 수 있습니다.

SSRF 공격을 방지하려면 모든 사용자 제어 입력의 유효성을 검사하고 애플리케이션이 만들 수 있는 요청 유형을 제한해야 한다.

우리도 모르게 당연히 생각했던 유효성검사나 Refresh Token , 비밀번호 hash처리 등 또한 위의 취약점을 보완하는 방법 중 하나에 해당한다. 이 외에도 웹 어플리케이션은 Dos공격에 대한 방어나 또 다른 유형의 해킹시도 등 다른 취약점도 가지고 있지만, 일단 위의 10가지 보안 취약점에 대해 자신의 API가 위의 항목중 일치하는 취약점이 존재 하는지 확인하고 그 항목에 대해 보안을 더 철저히 해보도록 하자!

profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

0개의 댓글