OWASP Top 10 2022 한글 version
2021년 Top 10 안에 3개의 새로운 카테고리가 등장했고, 이름 변경 및 통합이 이루어졌다.
그걸 이어받아 2022년에 업데이트된 주의해야 할 주요 보안 취약점은 다음과 같다.
(크게 4년에 한번씩 바뀌고 매년 조금씩 업데이트 되는 구조라고 이해하면 된다. 잘 나온 원문을 번역 돌렸으니 이해를..)
THE OWASP TOP 10 LIST 2022
1. Broken Access Control
액세스 제어는 사용자가 지정된 권한의 범위를 넘어서는 작업을 수행하지 못하도록 하는 전략을 구현합니다. 액세스 취약성 때문에 인증되지 않았거나 원하지 않는 사용자가 분류된 데이터 및 프로세스 및 사용자 권한 설정에 액세스할 수 있습니다.
예를 들면
JWT(JSON Web Token) 액세스 제어 토큰을 사용하여 변조 또는 재생하거나 쿠키 또는 숨김 필드를 수정하여 권한을 증가시키거나 JWT 무효화를 이용하는 등의 메타데이터 조작은 액세스 제어 취약성의 한 예입니다.
두 번째 예시는 부결 원칙 위반이다. 액세스 권한은 특정 역할, 기능 또는 사용자에게만 부여되어야 하지만 모든 사용자가 액세스할 수 있습니다. 이러한 오류는 공격자가 원하는 모든 항목에 쉽게 액세스할 수 있게 할 수 있습니다.
예방 방법
- Secure Coding을 적용하고 관리자 계정 및 제한 해제
- 다중 요소 인증 설치와 같은 예방 조치를 취함
- 액세스 제어 메커니즘을 한 번만 적용하고 응용 프로그램 기간 동안 재사용하여 CORS를 줄인다.
- 도메인 모델은 별개의 애플리케이션 비즈니스 제한 제약을 부과
- 자동화된 공격 툴의 영향을 완화하기 위해 API 및 컨트롤러에 대한 액세스를 제한
- 액세스 제어에 오류를 기록하고 필요에 따라 관리자에게 알림
- 사용자에게 정보를 생성, 보기, 수정 또는 지울 수 있는 권한을 부여하는 대신 모델 액세스 제어는 레코드 소유권을 강제
2. Cryptographic Failures
이전에는 기밀 데이터 노출로 알려져 있던 암호화 오류가 한 단계 상승하여 2위 자리를 차지했습니다. 이는 주요 원인이라기보다는 증상에 가깝습니다. 여기서는 중요한 데이터를 자주 노출시키는 암호화 오류 또는 오류의 부족에 중점을 둡니다. 중요한 데이터라고 하는건 세션 토큰, 로그인 ID 및 암호, 온라인 트랜잭션, 개인 정보를 말한다.
예를 들면
애플리케이션은 자동화된 데이터베이스 암호화를 통해 신용카드 데이터를 안전하게 암호화할 수 있다. 하지만 이 정보에 액세스하면 즉시 암호화되지 않으므로 SQL 주입 오류가 일반 텍스트로 신용 카드 정보를 추출할 수 있으며, 이를 침입자가 악용할 수 있습니다.
예방 방법
- scrypt, Argon2, PBKDF2, bcrypt와 같은 암호를 저장하기 위해 강력한 적응형 해시 알고리즘을 사용
- 중요한 데이터를 전송할 때 FTP 및 SMTP와 같은 오래된 프로토콜은 피한다.
- 단순히 암호화를 사용하는 대신 인증된 암호화를 구현
- 암호화적으로 임의의 키는 바이트 배열로 생성 및 저장되어야 한다. 암호를 사용할 경우 암호 기반 키 생성 알고리즘을 사용하여 키와 같은 것으로 변경
3. Injections
SQL Injection은 SQL을 사용하여 정보를 얻거나 일반적으로 인증된 사용자 계정이 필요한 활동을 수행하는 웹 사이트에 대한 데이터베이스 공격입니다. 이러한 코드는 프로그램이 자체 코드로 해석하기 어렵기 때문에 공격자는 주입 공격을 수행하여 보호된 영역에 액세스하고 중요한 데이터를 신뢰할 수 있는 사용자로 위장할 수 있습니다.
Injection에는 SQL injections, command injections, CRLF injections, and LDAP injections 등이 포함됩니다.
Injection은 많이 방어가 되고 있어서 3위로 떨어졌습니다.
예방 방법
- 인터프리터를 완전히 회피하거나 매개 변수화된 API를 제공하거나 ORM 계측기로 변환하는 API를 사용
- 서버 측 유효성 검사를 사용
- 쿼리 내에서 LIMIT 및 기타 SQL 제약 조건을 활용
4. Insecure Design
이것은 2021년도의 완전히 새로운 카테고리로, threat modeling, design safety recommendations, reference architectures를 더 많이 사용해야 하는 설계 및 아키텍처 결함에 초점을 맞추고 있습니다. 안전하지 않은 설계는 "missing or inadequate control design." 과 같은 다양한 문제를 포함하는 광범위한 범주입니다.
안전하지 않은 설계는 안전하지 않은 구현과 동일하지 않습니다. 구현 결함으로 인해 설계가 안전한 경우에도 취약성이 발생할 수 있습니다. 반면에 결함이 있는 설계는 특정 위협으로부터 방어하는 데 필요한 보안 보호 장치가 존재하지 않기 때문에 완벽한 구현으로 보완할 수 없습니다.
예방 방법
- 보안 및 개인 정보 보호를 안전하게 구축하기 위해 전문가의 도움을 받아 보안 개발 라이프사이클을 설정하고 사용
- Threat Modeling은 중요한 검증, 액세스 제어, 애플리케이션 로직 및 필수 흐름에 권장
- 모든 계층에 걸쳐 설계별로 테넌트를 분리하는 것도 실질적인 예방적 접근법으로 간주
5. Security Misconfigurations
일반적인 보안 설정 문제는 잘못 구성된 액세스 제어와 마찬가지로 공격자가 중요한 데이터 및 사이트 영역에 빠르고 쉽게 액세스할 수 있도록 함으로써 상당한 위험을 초래할 수 있습니다. 평균 발생률이 4%이고 이 범주에서 공통 약점 열거(CWE)가 208,000건 이상 발생한 OWASP는 90% 응용 프로그램의 잘못된 구성을 확인했습니다.
예방 방법
- 체계적인 프로세스. 개발, 품질 관리 및 운영 환경의 구성은 서로 다른 사용자 권한과 유사해야 함
- 안전 환경 구축을 위한 프로세스 자동화
- 사용하지 않는 기능 및 프레임워크는 제거하거나 설치하지 않아야 한다.
6. Vulnerable and Outdated components
프로그램이 안전하지 않거나 지원되지 않거나 오래된 경우 취약성과 관련된 위험이 있을 수 있습니다. 이 패키지에는 응용 프로그램/웹 서버, 운영 체제, 응용 프로그램, DBMS, API, 기타 요소, 라이브러리 및 런타임 환경이 포함됩니다.
예방 방법
- Component는 공식 출처에서 구매
- 작동하지 않거나 이전 버전에 대한 보안 업데이트를 제공하지 않는 모듈 및 요소를 찾는다.
- 패치를 수행할 수 없는 경우 관찰된 취약성을 관찰, 식별 또는 보호할 수 있는 패치를 직접 개발
- 과도한 요구 사항, 기능, 요소, 폴더 등을 제거
7. Identification and Authentication failures
사용자 정보, 암호 복구, ID 세션 및 기타 로그인 자격 증명을 얻을 때 보안 문제가 발생하고, 공격자가 부적절한 인증을 이용하기 위해 이러한 취약성을 이용합니다.
예를 들면
공격자가 실제 사용자 및 암호 목록에 액세스할 수 있을 때 자격 증명 스터핑과 같은 자동 공격이나 "Password1" 또는 "admin/admin"과 같은 미리 정의된 약한 일반 암호를 허용하는 경우 인증 결함의 징후일 수 있습니다.
예방 방법
- automated credential stuffing, brute-force attacks, and the reuse of stolen credentials 등을 방지하기 위해 가능한 모든 곳에서 Multi-factor 인증을 사용
- 새로운 비밀번호나 수정된 비밀번호를 10,000개의 최악의 비밀번호 데이터베이스와 비교하여 확인함으로써 비밀번호 보안을 강화
- 모든 결과에 동일한 메시지를 사용하면 암호 복구, 등록 및 API 경로에 대한 공격 방지 가능
- 특히 관리자의 경우 기본 자격 증명을 사용하지 말것
8. Software and Data integrity failures
중요한 정보가 데이터베이스에 저장되고 보안 침해에 취약해지면서 데이터 무결성 문제가 소프트웨어에 필수적으로 대두되고 있습니다. 소프트웨어 업데이트, 중요 데이터 및 CI/CD 절차의 무결성을 검증하지 않고 가져오는 데 중점을 둔다.
예를 들면
응용 프로그램이 CDN(Content Delivery Network) 또는 인증되지 않은 소스의 확장, 모듈 또는 리포지토리를 사용하는 경우입니다. 보호되지 않는 CI/CD(Continuous Integration/Continuous Delivery) 프로세스는 악성 코드, 시스템 손상 또는 무단 액세스의 위험을 높일 수 있습니다.
예방 방법
- OWASP CycloneDX 또는 OWASP Dependency-Check와 같은 소프트웨어 공급망용 보안 도구를 사용하여 구성 요소에 설계 결함이 없음을 보장할 수 있습니다.
- 설정 및 배포 작업 전반에 걸쳐 코드 무결성을 보호하기 위해 CI/CD 워크플로우에 필요한 분할, 액세스 제어 및 매개 변수화가 있는지 확인해야 합니다.
- 서명되지 않았거나 암호화되지 않은 컴파일 데이터는 데이터 변경 또는 복제를 식별하기 위한 무결성 테스트 또는 디지털 서명이 없는 한 신뢰할 수 없는 클라이언트로 전송되지 않아야 합니다.
9. Security logging and Monitoring failures
의심스러운 작업 및 발생 시 추적 기능이 부족하면 모니터링되지 않는 시간 간격이 확장되어 보안 위반이 감지되지 않을 수 있습니다.
예방 방법
- 모든 인증, 액세스 보안 시스템 및 서버 측 데이터 유효성 검사 문제가 의심스럽거나, 사기성 계정을 탐지할 수 있는 충분한 사용자 정보와 함께 기록되고 지연된 포괄적인 조사가 이루어질 때까지 적절한 기간 동안 저장되는지 확인
- 로그 관리 시스템에서 사용할 수 있는 형식으로 로그를 생성해야 합니다.
- NIST 800-61r2 이상 버전과 같은 사고 복구 및 대응 노력을 위한 전략을 작성하거나 적용합니다.
- 모니터링 시스템에 대한 침입 또는 사이버 위협을 방지하기 위해 로그 데이터가 적절하게 인코딩되었는지 확인
10. Server-side request forgery (SSRF)
SSRF는 사용자가 제공한 URL을 확인하지 않고 서버 측 쿼리를 수행할 때 수행됩니다. 이를 통해 공격자는 가상 사설망(VPN), 방화벽 또는 네트워크 액세스 제어 목록(ACL)에 의해 보호되는 경우에도 응용 프로그램이 원하지 않는 위치로 위조 요청을 전송하도록 유도할 수 있습니다.
새로운 온라인 애플리케이션이 최종 사용자에게 편리한 기능을 제공함에 따라 URL 가져오기가 일반적인 일이 되었습니다. 결과적으로 SSRF의 발생이 증가하고 있다. 또한 클라우드 서비스와 설계 복잡성으로 인해 SSRF의 강도가 높아지고 있습니다.
예방 방법
- SSRF의 영향을 제한하려면 원격 리소스 액세스 기능을 별도의 네트워크로 분리해야함
- 필수 내부 트래픽을 제외한 모든 웹 트래픽을 차단하기 위해 "deny by default" 방화벽 설정 또는 네트워크 액세스 제어 규칙을 설정
- time of check, time of usage 과 같은 공격으로부터 보호하려면 URL 정확도를 확실히 하는 것이 좋다.
끝!