본문 바로가기
컴퓨터공학

OWASP TOP10 2023 소개 및 정리

by oobw 2023. 11. 26.

웹 애플리케이션은 현대 비즈니스와 개인 활동의 핵심입니다. 그러나 웹 애플리케이션은 사이버 공격자들에게 매력적인 공격 표적이 되어 있으며, 이로 인해 웹 애플리케이션 보안은 매우 중요한 주제가 되었습니다. OWASP (Open Web Application Security Project)는 웹 애플리케이션 보안 커뮤니티에서 가장 중요한 자원 중 하나로, 매년 'OWASP Top 10'이라고 하는 보안 위협 목록을 발표합니다. 이 목록은 웹 개발자, 보안 전문가 및 조직이 웹 애플리케이션 보안을 강화하는 데 도움이 되는 중요한 지침을 제공합니다. 이 글에서는 2023년 버전의 OWASP Top 10에 대해 자세히 살펴보겠습니다.

1. OWASP Top 10이란 무엇인가?

OWASP Top 10은 Open Web Application Security Project의 주요 프로젝트 중 하나로, 웹 애플리케이션 보안을 향상시키기 위해 개발된 가장 중요한 지침 중 하나입니다. 이 프로젝트는 웹 개발자, 보안 전문가, 조직, 그리고 보안 업계에서 일하는 모든 이들에게 웹 애플리케이션에서 발생하는 주요 보안 위험을 식별하고 대응하는 데 도움을 주고 있습니다.

 

OWASP Top 10은 매년 업데이트되며, 이전 버전에서 식별된 보안 위험을 최신 상황과 기술 동향에 맞게 조정하여 제공합니다. 이 목록은 웹 애플리케이션 보안을 향상시키기 위한 기준을 제시하고, 개발자와 보안 전문가가 웹 애플리케이션에서 발생할 수 있는 보안 문제를 이해하고 대응하는 데 도움을 줍니다.

A1: Broken Access Control (액세스 제어의 파괴)

Broken Access Control는 웹 애플리케이션 보안에서 가장 중요하고 흔한 취약점 중 하나입니다. 이 취약점은 사용자 또는 시스템이 허가되지 않은 방식으로 리소스에 액세스할 수 있는 상황을 가리킵니다. 액세스 제어는 사용자에게 필요한 기능과 리소스만을 제공하도록 하는 핵심적인 보안 원칙 중 하나이며, 이 원칙을 위반하는 것이 바로 Broken Access Control입니다. 오름세를 이어가며 2017년 5위에서 2021년에는 목록 상단을 차지한 'Broken Access Control'은 여전히 중요한, 계속되는 위협으로 남아 있습니다.

Broken Access Control이 발생하는 이유

구성 오류, IDOR (Insecure Direct Object References)로 발생할 수 있는데, 이는 응용 프로그램이 파일 또는 데이터베이스 레코드와 같은 리소스에 직접적인 참조를 노출시키는 경우입니다. 또한 보안되지 않은 세션 관리로 인해 세션 관리에서의 결함으로 공격자가 사용자 세션을 탈취할 수 있는 경우 등 여러 이유로 발생할 수 있습니다.

방어 및 예방

여기서 개발자와 시스템 관리자는 '최소 권한 원칙'을 따라야 합니다. 이것은 사용자에게 자신의 작업을 수행하는 데 필요한 최소한의 권한만 부여하고 더 이상의 권한을 부여하지 않는 것을 의미합니다. 모든 사용자 입력은 검증되고 정리되어 악의적인 데이터 삽입을 방지해야 하며, API에 액세스 제어를 적용하고 모든 요청에 대해 권한 확인을 해야 합니다. 정기적인 보안 감사와 코드 검토는 액세스 제어 문제를 식별하고 수정하기 위해 필수적이며, 무단 액세스를 제한하기 위해 다중 인증을 강제해야 합니다.

A2: Cryptographic Failures (암호화 실패)

이전에는 "Sensitive Data Exposure"라는 이름으로 세 번째 위치에 있었지만, 이후에 이름이 변경되었습니다. 이전 이름은 원인이 아닌 증상을 설명했기 때문입니다. 암호화는 신용 카드 번호와 개인 식별 정보 (PII)와 같은 매우 민감한 데이터를 전송 중에 보호하는 데 사용됩니다. 그러나 이것은 약한 암호화 알고리즘이나 짧은 암호화 키와 같은 요소로 인해 실패할 수 있으며, 이로 인해 공격자가 민감한 데이터를 해독하기 쉬워질 수 있습니다.

 

암호화 실패의 다른 예로는 보안되지 않은 암호 저장, 충분하지 않은 전송 계층 보안(중간자 공격을 초래할 수 있음), 약한 SSL/TLS 프로토콜, 그리고 웹 애플리케이션을 공격에 노출시킬 수 있는 보안되지 않은 암호 스위트가 있습니다.

Cryptographic Failures를 예방하는 방법

암호화 약점을 식별하고 수정하기 위해 정기적인 보안 테스트(코드 검토 및 취약성 평가 포함)를 수행하고, 안전한 암호화 라이브러리를 사용하는 것도 고려해야 합니다. 몇 가지 방법은 다음과 같습니다.

  • 강력한 암호화 알고리즘 사용: 안전하고 견고한 암호화 알고리즘을 사용하여 데이터를 보호하고, 암호화 키의 길이도 충분히 길어야 합니다.
  • 암호화 키 관리: 암호화 키를 안전하게 저장하고 관리하고, 키 누출을 방지하기 위한 강력한 키 관리 정책을 적용해야 합니다.
  • 암호 저장 보안: 사용자 비밀번호와 같은 암호를 안전하게 저장하기 위해 안전한 해시 알고리즘과 솔트(Salt)를 사용해야 합니다.
  • 전송 보안 강화: 전송 중에 데이터를 보호하기 위해 안전한 프로토콜 및 암호화를 사용하고, SSL/TLS를 업데이트하고 강화해야 합니다.
  • 암호 라이브러리 사용: 암호화 기능을 구현할 때 안전하고 검증된 암호 라이브러리를 사용해야 합니다.
  • 보안 테스팅: 암호화 구현의 취약점을 찾아내고 보완하기 위해 정기적인 보안 테스팅을 수행해야 합니다.

A3: Injection (삽입 공격)

2017년에는 Injection이 OWASP Top 10에서 1위를 차지하고 있었으며, Cross-Site Scripting은 7위에 랭크되었습니다. 그러나 이제 이 두 가지 보안 취약점은 하나의 통합 용어 아래에 모아져 있으며, OWASP 2023에서는 3위에 해당하는 카테고리로 통합되었습니다.

 

Injection 공격은 입력 유효성 검사 및 데이터 처리의 부적절한 처리에 취약점을 이용합니다. 공격자는 SQL 쿼리, 코드 스니펫 또는 명령을 웹 애플리케이션 양식 또는 URL에 주입합니다. 이를 통해 공격자는 민감한 데이터에 액세스하고 애플리케이션의 동작을 조작할 수 있습니다.

 

주요 예시로는 다음과 같은 것들이 있습니다.

  • SQL Injection (SQL 삽입): 데이터베이스 공격을 위해 SQL 쿼리를 주입하는 것으로, 공격자는 데이터베이스를 조작하거나 민감한 정보를 탈취할 수 있습니다.
  • Cross-Site Scripting (XSS, 크로스 사이트 스크립팅): 주로 JavaScript 기반 브라우저 공격으로, 감염된 웹 페이지를 통해 세션 탈취, 쿠키 도용 또는 사용자에 대한 기타 공격을 수행합니다.
  • Command Injection (명령 삽입): 공격자는 애플리케이션에서 실행되는 시스템 명령에 악성 명령을 주입하여 서버를 제어하거나 무단 작업을 수행할 수 있습니다.
  • LDAP Injection (LDAP 삽입): 공격자는 인증 및 권한 부여에 사용되는 LDAP 쿼리를 조작하여 액세스 권한을 얻습니다.
  • XML Injection (XML 삽입): 공격자는 XML 데이터에 악의적인 내용을 삽입하여 애플리케이션의 구문 분석 프로세스를 방해하고 액세스 권한을 얻을 수 있습니다.
  • Server-Side Template Injection (SSTI, 서버 측 템플릿 삽입): 공격자는 서버 측 템플릿에 악성 코드를 주입하여 서버에서 코드를 실행할 수 있습니다.

삽입 공격 방어 및 예방

삽입 공격을 방어하고 예방하기 위한 몇 가지 중요한 조치는 다음과 같습니다.

  • 입력 검증 및 정제: 모든 입력 데이터를 검증하고 정제하여 악의적인 데이터 삽입을 방지해야 합니다.
  • 암호화: 중요한 데이터를 저장 및 전송할 때 암호화를 사용하여 데이터의 안전성을 보장해야 합니다.
  • 보안 헤더 사용: 웹 애플리케이션에서 적절한 보안 헤더를 사용하여 XSS 공격을 방어해야 합니다.
  • 보안 라이브러리 사용: 삽입 공격에 대비하여 안전한 코드 라이브러리 및 프레임워크를 사용해야 합니다.
  • 정기적인 보안 검토: 애플리케이션의 코드 및 구성을 정기적으로 검토하여 삽입 공격 취약점을 식별하고 수정하해야 합니다.

Injection 공격은 웹 애플리케이션에 매우 심각한 위협을 제공할 수 있으므로 이러한 취약점을 방어하기 위한 강력한 보안 정책과 관행을 따르는 것이 중요합니다.

A4. Insecure Design (보안이 약한 설계)

이 OWASP 2023 범주는 2021년에 처음 소개되었으며, 해커가 악용할 수 있는 부적절한 애플리케이션 설계와 아키텍처 결함을 다룹니다. 보안이 약한 설계 취약점은 팀이 보안 최선의 관행을 준수하지 않거나 애플리케이션 생성의 코드 설계 단계에서 잠재적인 위협을 충분히 예측하고 평가하지 못할 때 발생합니다.

 

보안이 약한 설계의 예로 너무 자세한 오류 메시지를 생성하는 앱이 있습니다. 이런 경우, 오류 조건에 대한 자세한 정보를 보고하고 애플리케이션 환경 또는 기타 관련 데이터에 대한 진단적인 단서를 제공하면, 공격자에게 잠재적으로 유용한 정보를 노출시킬 수 있습니다. 그들은 이 정보를 사용하여 경로 이탈(Path Traversal) 또는 SQL Injection과 같은 다른 공격을 실행할 수 있습니다.

 

알려진 공격 방법을 차단하기 위해 일관된 위협 모델링을 사용하여 설계 취약점을 완화하는 것이 중요합니다. 이렇게 함으로써 개발자와 시스템 설계자는 애플리케이션의 설계 초기 단계에서 보안을 고려하고 예방할 수 있습니다.

A5. Security Misconfiguration (보안 구성 오류)

서버 등 세팅하는 도중에 보안 구성에 잘못된 설정을 하는 오류입니다. 이번에는 2017년의 XML External Entities (XXE) 범주가 포함되어 있습니다. 보안 구성 오류는 다양한 잠재적인 취약점을 포함하고 있지만, 다음은 가장 흔한 것들입니다.

  • 패치되지 않은 취약점: 시스템에서 보안 패치가 적용되지 않은 경우
  • 기본 설정: 기본 설정을 그대로 사용하는 경우
  • 사용하지 않는 페이지: 애플리케이션에서 사용하지 않는 페이지가 여전히 노출되는 경우
  • 보호되지 않은 파일 및 디렉토리: 파일 또는 디렉토리에 대한 적절한 보호가 되지 않은 경우
  • 불필요한 서비스: 시스템에서 불필요한 서비스 또는 기능이 활성화된 경우
  • 취약한 XML 파일 사용: 애플리케이션에서 취약한 XML 파일을 사용하는 경우

웹마스터가 자주 하는 실수 중 하나는 CMS (콘텐츠 관리 시스템)의 기본 구성을 변경하지 않는 것입니다. CMS 앱은 사용자 친화적이지만, 최종 사용자에게 보안 위험을 초래할 수 있습니다. 많은 공격은 완전히 자동화되며 기본 설정을 악용하기에, CMS 설치 중 이러한 설정을 변경하는 것이 잠재적인 공격의 상당수를 완화하기 위한 중요한 단계입니다. 댓글 관리, 사용자 액세스, 사용자 정보 표시 및 기본 파일 권한을 제어하기 위해 설정을 조정함으로써 보안을 강화할 수 있습니다.

A6. Vulnerable and Outdated Components (취약하고 업데이트 안되는 모듈 사용)

가장 간단한 웹 사이트조차도 프레임워크, 라이브러리, 확장 프로그램 및 플러그인과 같은 다양한 구성요소들로 이루어져 있으며, 이들 모두를 최신 상태로 유지해야 합니다. 공격자들은 취약한 구성 요소가 있는 웹 사이트를 적극적으로 찾아서 악성 코드를 전파하거나 피싱 공격을 수행하는 등의 공격에 악용하기 위해 노력하고 있으므로 업데이트는 반드시 상시로 이루어져야 합니다.

 

하지만 웹 사이트가 많은 모듈을 사용하고 많은 라이브러리에 종속성에 의존하는 경우 이것을 실현하기가 쉽지 않을 수 있습니다. 이 문제를 해결하는 첫 번째 단계는 웹 사이트에서 사용하고 있는 모든 구성 요소를 나열하고 각 구성 요소의 업데이트를 자동으로 수행하는 자동화 시스템을 구축하는 것입니다.

A7. Identification and Authentication Failures (식별 및 인증 실패)

인증 및 식별 관리 실패는 애플리케이션에 악의적인 사용자가 실제 사용자로 가장하도록 노출시킬 수 있는 위험을 초래합니다. 유효 기간이 설정되지 않은 세션 ID는 계속 실행될 수 있습니다. 약한 암호는 추측에 취약할 수 있으며 로그인 시도에 제한이 설정되지 않으면 자동화된 공격이 성공할 때까지 계속 시도됩니다. 이러한 문제를 해결하기 위해 애플리케이션 내에서 다중 인증(MFA)을 구현해서 제공해야 합니다. 또한 개발자들은 권장되는 암호 길이, 복잡성 및 암호 회전 정책을 준수해야 함을 인식해야 합니다.

A8. Software and Data Integrity Failures (소프트웨어 및 데이터 무결성 실패)

이러한 문제는 설계 결함의 일종입니다. 현대 아키텍처의 복잡성 때문에 개발자들은 종종 다양한 소스에서 가져온 플러그인과 라이브러리를 파이프라인에 추가할 때 그 무결성을 확인하지 않습니다. 이 중 하나라도 실패하면 애플리케이션은 무단 정보 노출, 시스템 침입 또는 악성 코드 삽입에 취약해질 수 있습니다. 이것이 모든 서드파티 및 오픈 소스 플러그인 및 라이브러리에 대한 활성 인벤토리 및 지속적인 위협 모니터링을 갖추는 것이 중요한 이유 중 하나입니다.

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

부족한 로깅 및 모니터링 기능은 사건을 놓치게 만들고 경고가 생성되지 않을 수 있으며, 이로 인해 심각한 피해가 발생할 때까지 눈치채지 못할 수 있습니다. 로그인 시도 및 실패 사례는 로깅되어야 하며, 서버 고장 시를 대비하여 로그를 백업해야 합니다. 로그는 정확해야 하므로 모니터링 시스템이 의심스러운 활동을 감지하거나 적시에 경고를 발생시킬 수 있으며, 로그는 변조에 대한 보호도 필요합니다.

 

취약성을 완화하기 위해 모든 로그인 시도(실패 포함)를 기록하고 로그 사본을 유지하며, 방해 방지 메커니즘을 사용하고 모니터링 시스템을 정기적으로 테스트해야 합니다.

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

이 취약점은 공격자가 서버로부터 내부 또는 외부 리소스로 무단 요청을 보낼 수 있게 해주는 것으로, SSRF 공격에서 공격자는 응용 프로그램의 입력 필드 또는 매개 변수를 조작하여 서버가 사용자의 동의 없이 임의의 URL로 요청을 보내도록 속일 수 있습니다. 이를 통해 사용자의 동의 없이 서버가 악성 요청을 수행하게 됩니다.

 

공격자는 이 취약성을 악용하여 민감한 데이터에 액세스하거나 내부 리소스와 상호 작용하거나 서버 대신 작업을 수행할 수 있으며, 이로 인해 애플리케이션 또는 그 인프라의 완전한 침투로 이어질 수 있습니다.

 

SSRF 취약성을 완화하기 위해 개발자는 다음과 같은 최선의 관행을 따라야 합니다.

  • 입력 유효성 검사: 사용자가 제공한 입력을 정확하게 유효성 검사하고 정제하여 악성 URL 또는 IP 주소가 요청에 사용되지 않도록 합니다.
  • 화이트리스트(Whitelisting): 허용된 URL 또는 IP 범위에 대한 화이트리스트를 구현하여 서버가 알려진 안전한 리소스로의 요청을 제한합니다.
  • 방화벽 규칙: 방화벽 및 네트워크 설정을 구성하여 서버가 특정 리소스와 프로토콜로부터의 요청을 제한합니다.
  • 안전한 API 사용: 응용 프로그램이 외부 리소스에 요청을 보내야 하는 경우 안전한 API 또는 공개 액세스용으로 제공된 특정 엔드포인트를 사용합니다.
  • 최소 권한 (Least Privilege): SSRF 공격이 발생할 경우 잠재적인 피해를 제한하기 위해 서버가 외부 리소스에 액세스하기 위해 필요한 최소한의 권한을 가지도록 합니다.

마치며

이번 글에서는 OWASP 2023 TOP 10에 대해서 알아보았습니다. OWASP 2023는 웹 애플리케이션 보안을 강화하기 위한 중요한 가이드로서, 웹 개발자와 보안 담당자는 최신 보안 취약점에 대한 인식을 높이고, 이를 예방하고 대응하기 위한 필수 도구와 지침을 얻을 수 있습니다.이 목록은 계속해서 업데이트되며, 보안 전문가들은 지속적인 모니터링 및 업데이트를 통해 보호 조치를 유지하고 개선해야 합니다. OWASP 2023는 우리의 디지털 세계에서 안전한 온라인 경험을 구현하기 위한 필수 자원 중 하나이며, 이를 통해 우리는 앞으로도 신뢰할 수 있는 웹 애플리케이션을 개발하고 사용할 수 있을 것입니다.