2021 OWASP TOP 10 문제점
A01:2021 – Broken Access Control
Broken Access Control는 인증된 사용자가 권한 수준 밖에서 작업을 수행 하기 위한 제한을 시행하는 것을 말하며 이러한 제한이 올바르게 적용되지 않을 때 Broken Access Control가 민감한 정보에 대한 무단 액세스와 수정 또는 소멸이 발생 할 수 있다.
Broken Access Control의 취약점
최소 권한 의 원칙에 의해 제한 되어야 하고 기본적으로 거부 되어야 하는 역할, 기능 및 기능에 대한 무료 액세스 권한을 부여하는 경우
매개 변수 및 강제 브라우징(예: URL 또는 HTML 페이지 수정) 변조 또는 액세스 제어 검사를 피하기 위해 API 요청을 수정하는 경우
사용자의 계정을 보고 수정할 수 있는 안전하지 않은 직접 개체 참조(예: 고유 식별자)를 제공하는 경우
버그 또는 설계 결함으로 인한 권한 상승을 하는 경우
JWT 액세스 제어 토큰, 쿠키, 숨겨진 필드 및 JWT 무효 남용과 같은 메타데이터 조작을 하는 경우
인증된 또는 권한 있는 페이지에 액세스하도록 강제 브라우징을 하는 경우
CORS(원산지 간 리소스 공유) 잘못된 구성으로 인해 신뢰할 수 없는/권한이 없는 소스에서 API 액세스 허용을 요청 하는 경우
예방 방법
액세스 제어는 신뢰할 수 있는 서버 또는 서버가 없는 API의 코드에서 구현되어야 효과적이어야 하며 이렇게 하면 공격자가 액세스 제어 확인 또는 메타데이터를 조작할 가능성이 줄어든다.
-공공 자원을 제외하고 기본적으로 거부설정
-레코드에 대한 사용자 액세스를 부여하는 대신 레코드 소유권을 적용
-액세스 제어 메커니즘을 한 번 도입하고 응용 프로그램에서 반복적으로 다시 사용
-도메인 모델은 고유한 응용 프로그램 비즈니스 제한 요구 사항을 적용
-실패한 액세스 제어 시도 및 필요한 경우 관리자에게 경고
-로그아웃 후 서버의 상태 세션 식별자 무효화
-상태 없는 JSON 웹 토큰(JWT) 단기 수명
-웹 뿌리에 메타데이터(git) 또는 백업 파일이 없는지 확인
-웹 서버 디렉터리 목록 사용 중지
-API 및 컨트롤러 액세스를 속도 제한하여 자동화된 공격 도구의 효과 감소
-기능 액세스 제어 장치 및 통합 테스트 수행
A02:2021 Cryptographic Failures
암호화 오류는 암호화 문제 또는 암호화가 전혀 없는 문제를 말하며 중요한 데이터 노출로 알려졌으며 암호화 실패는 종종 데이터에 노출될 수 있으며 종종 발생합니다.
취약점
중요한 데이터를 텍스트로 저장하거나 전송하는 경우
오래되었거나 약한 암호화 알고리즘 및 프로토콜 사용하는 경우
키 관리 및 회전을 사용하지 않고 기본 또는 약한 암호화 키를 사용하는 경우
암호화를 적용하지 않는 경우
서버 인증서 및 트러스트 체인의 유효성을 제대로 검사하지 않는 경우
초기화 벡터를 무시하거나 재사용하거나 안전하지 않은 작동 모드를 사용하는 경우
예방 방법
-응용 프로그램에서 전송되는 데이터(처리, 저장 또는 전송)를 분류하고 개인 정보 보호법, 규정 및 비즈니스 요구에 따라 민감한 데이터를 식별하기
-데이터 분류에 따라 보안 제어 구현하기
-중요한 데이터를 저장하거나 가능한 한 빨리 폐기하거나 PCI DSS 준수 토큰화 또는 잘림을 사용하지 않기
-저장해야 하는 모든 데이터 암호화 처리 하기
-강력한 알고리즘, 프로토콜 및 키를 사용하기
-전송 계층 보안(전송 계층 보안) 프로토콜을 사용 하 여 전달 가능한 모든 데이터를 암호화 하는 전달 비밀
-HTTP 엄격한 전송 보안(HSTS) 지시문 암호화 또는 이와 유사한 사용하기
-FTP 및 SMTP 프로토콜을 사용하여 중요한 데이터를 전송하지 않기
-중요한 데이터가 포함된 사용자 응답에 대한 캐싱 비활성화하기
-항상 해시 암호를 사용하고 암호 저장에 brcrypt, 암호, Argon2, PBKDF2와 같은 작업 요소가 있는 기능을 사용하기
-항상 인증된 암호화를 사용하기
-암호화 임의 키 생성을 사용하고 키를 바이트 배열로 저장하기
-필요한 경우 암호화 무작위 성을 사용하지만 예측 가능한 시드가 낮은 지 확인하기
A03:2021 Injection
injection attack 명령을 실행하도록 하는 응용 프로그램에서 신뢰할 수 없는 데이터를 강제로 명령을 실행하도록 한다. 데이터 또는 악성 코드는 공격자가 삽입하고 데이터 또는 전체 응용 프로그램을 손상시킬 수 있으며 일반적인 Injection공격은 SQL Injection, cross-site scripting (XSS) attacks, but code injections, command injections, CCS injections 등이 있다.
취약점
사용자가 제공하는 데이터의 유효성 검사, 필터링 등을 처리하지 않는 경우
동적 쿼리 또는 매개 변수화되지 않은 호출을 직접 사용하는 경우
적대적인 데이터는 ORM(개체 관계형 매핑) 검색 매개 변수 내에서 직접 사용, 연결 또는 사용되어 추가의 민감한 레코드를 추출 하는 경우
예방방법
-매개 변수 쿼리를 사용하거나 ORM(개체 관계형 매핑 도구)으로 안전한 API를 사용하기
-서버 측 입력 유효성 검사(화이트리스트)를 사용
-LIMIT와 같은 쿼리 내에서 데이터베이스 컨트롤을 사용하여 SQL 주입이 성공하면 데이터의 대량 노출을 방지
-취약점 도구에 의해 SQL Injection 테스트 또는 XSS 테스트를 실행하여 웹 앱 또는 API에서 발견된 모든 약점 및 공격 벡터에 대해 처리하기
A04:2021 Insecure Design
Insecure Design는 설계 및 아키텍처의 결함과 관련된 위험에 중점을 두고 있으며 이들은 구현의 결함과 관련된 위험과 다르다.
잘 구현된 안전하지 않은 설계는 여전히 공격에 취약하며 부분적으로 소프트웨어 개발 시 보안 제어 및 비즈니스 위험 프로 파일링이 부족하여 필요한 보안 설계 의 정도를 적절히 판단하지 못하는 것을 의미
예방방법
-응용 프로그램 보안 전문가와 함께 안전한 개발 수명 주기 구현하여 설계 보안 및 개인 정보 보호 관련 요구 사항을 평가하기
-구성 요소를 사용할 준비가 된 안전한 디자인 패턴 라이브러리 또는 포장 도로 도입 및 사용하기
-위협 모델링 방법을 중요한 인증, 액세스 제어, 비즈니스 논리 및 키 흐름에 적용하기
-보안 언어 및 제어 사용자 스토리의 일부 만들기
-시스템의 각 계층에서 프론트엔드에서 백엔드까지 타당성 검사를 시행하기
-단위 및 통합 테스트를 통해 위협 모델에 대한 중요한 흐름의 저항을 검증테스트하며 응용 프로그램의 모든 계층에 대한 사용 및 오용 사례 컴파일 하기
-노출 및 보호 요구 사항에 따라 시스템의 계층 레이어 및 네트워크 레이어를 분리하기
-모든 계층에 관계에 대하여 설계를 통하여 강력하게 분리하기
-사용자 또는 서비스 별로 리소스 소비 제한하기
A05:2021 Security Misconfiguration
Security Misconfiguration 은 보안되지 않았거나 올바르게 구성되지 않은 보안 컨트롤을 말한다.
취약점
응용 프로그램의 모든 부분에서 보안 경화가 부족한 경우
클라우드 서비스에 대한 잘못된 권한을 구성 한 경우
포트, 서비스, 페이지, 계정 또는 권한과 같은 불필요한 기능이 허용되거나 설치된 경우
기본 계정/암호가 사용 가능하거나 변경되지 않는 경우
최신 보안 기능이 올바르게 사용되거나 구현되지 않는 경우
서버, 프레임워크, 라이브러리 또는 데이터베이스의 보안 설정이 보안 값으로 설정되지 않는 경우
서버에서 보안 헤더 또는 지시 문이 전송되지 않거나 보안 값으로 설정되지 않는 경우
소프트웨어가 최신화 되지 않는 경우
예방방법
-분리되고 안전한 환경을 배포하는 프로세스를 개발하고 자동화하여 경화 프로세스를 통해 시스템을 보호하기
-불필요한 기능, 구성 요소, 설명서 또는 샘플이 없는 "최소 플랫폼"만을 사용하기
-클라우드 저장소 권한 검토하기
-패치 관리 프로세스의 일환으로 모든 보안 노트, 업데이트 및 패치 구성에 대한 검토 및 업데이트를 진행하기
-분할, 컨테이너화 또는 클라우드 보안 그룹을 통해 분할된 응용 프로그램 아키텍처를 구현하여 구성요소를 분리하기
-보안 헤더와 같은 보안 지침을 클라이언트로 잘 보내기
-각 환경에서 구성 및 설정의 효율성 확인 자동화하기
A06:2021 Vulnerable and Outdated Components
취약점
사용하는 클라이언트 측 및 서버 측 구성 요소의 버전을 모르는 경우
소프트웨어가 취약하거나 지원되지 않거나 오래된 경우.
정기적으로 취약점을 검색하지 않고 사용하는 구성 요소에 대한 보안 뉴스를 따르지 않는 경우
패치가 나올 때 플랫폼, 프레임워크 및 종속성을 수정하거나 업그레이드하지 않는 경우
개발자가 업데이트, 업그레이드 또는 패치 된 라이브러리의 호환성에 대한 테스트를 수행하지 않는 경우
구성 요소의 구성이 보호되지 않은 경우
예방방법
-사용되지 않는 종속성, 불필요한 기능, 구성 요소, 파일 및 문서 제거하기
-OWASP 종속성 검사 등을 사용하여 클라이언트 측 및 서버 측 구성 요소의 버전과 종속성을 정기적으로 정리하기
-공식 소스와 보안 링크만 사용하여 구성 요소를 가져오고 서명된 패키지만을 선택하기
-유지 관리되지 않고 이전 버전에 대하여 보안 패치가 없는 라이브러리 및 구성 요소에 대해 주의하여
-패치 할 수 없는 경우 알려진 취약점을 모니터링, 감지 또는 보호하여 가상 패치를 배포하기
A07:2021 Identification and Authentication Failures
취약점
자격 증명 스터핑과 같은 자동화된 공격으로부터 보호되지 않는 경우
무차별적인 공격 허용되는 경우
기본, 약함 또는 잘 알려진 암호를 사용하는 경우
보안이 약하거나 비효율적인 자격 증명 복구 및 암호 절차를 잊어 버린 경우
일반 텍스트, 암호화된 암호 또는 약하게 해시 된 암호 데이터 저장소를 사용하는 경우
비효율적인 다단계 인증을 사용하거나 사용하지 않는 경우
URL에서 식별된 세션을 노출하는 경우
로그인 후 식별된 세션을 다시 사용하는 경우
로그아웃 중 또는 비활성 상태인 사용자 세션 및 인증 토큰을 제대로 무효화하지 않는 경우
예방방법
-자격 증명 채우기, 무차별 암호 및 도난 당한 자격 증명 재사용 공격을 방해하기 위하여 가능하면 다단계 인증을 구현하기
-특히 관리자 수준 사용자를 위해 기본 자격 증명을 제공하거나 배포하지 말기
-약한 암호 검사 수행하도록 하기
-국가 표준 기술 연구소 (NIST) 800-63b 지침 또는 암호 길이, 복잡성 및 회전 정책을 결정 하는 암호 정책을 사용 하기
-모든 결과에 대해 동일한 메시지를 사용하여 계정 열거 공격에 대한 등록, 자격 증명 복구 및 API 경로 강화하기
-실패한 시도를 기록하고 모니터링하고 자격 증명 채우기, 무차별 암호 또는 다른 유형의 공격이 감지되면 관리자가 알 수 있도록 하기
-로그인 후 엔트로피가 높은 새로운 임의 세션 ID를 생성하는 서버 측, 보안 및 기본 제공 세션 관리자를 활용하기
A08:2021 Software and Data Integrity Failures
Software and Data Integrity Failures는 무 결성이 확인되지 않은 소프트웨어 업데이트, 중요한 데이터 및 CI/CD 파이프라인의 취약점과 관련이 있으며
확인되지 않고 신뢰할 수 없는 소스, 저장소 또는 CDN(컨텐츠 전송 네트워크)의 플러그인, 라이브러리 또는 모듈에 의존하는 응용 프로그램이 이러한 유형의 오류에 노출될 수 있습니다.
유사한 오류 소스는 반드시 철저한 무 결성 검사를 포함하지 않는 대부분의 응용 프로그램의 자동 업데이트 기능일 수 있습니다. 이렇게 하면 공격자가 취약점을 생성하기 위한 업데이트를 배포할 수 있으며. 여기서 발생하는 오류는 공격자가 볼 수 있고 수정할 수 있는 구조로 인코딩 되거나 직렬화된 개체 또는 데이터 때문입니다.
예방방법
-디지털 서명과 같은 메커니즘을 사용하여 소스의 소프트웨어 또는 데이터가 변조되지 않았는지 확인하기
-라이브러리와 종속성이 신뢰할 수 있는 저장소만 사용하거나 위험 프로필이 높은 경우 알려진 저장소만을 사용하기
-소프트웨어 공급 망 보안 도구를 사용하여 구성 요소에 알려진 취약점이 없는지 확인하기
-악성 코드 또는 구성이 소프트웨어 파이프라인에 삽입될 위험을 줄이기 위해 코드 및 구성 변경에 대한 검토 프로세스를 수립하도록 하기
-CI/CD 파이프라인에 대한 철저한 분리, 구성 및 액세스 제어를 구현하여 Build 및 배포 프로세스를 통해 코드의 무 결성을 보장하도록 하기
-사전 무 결성 검사 나 디지털 서명 없이 신뢰할 수 없는 클라이언트에 서명되지 않았거나 암호화되지 않은 직렬화된 데이터가 전송 되었는지 확인하여 데이터의 변조 또는 재생을 감지하기
Security Logging and Monitoring Failures A09:2021
취약점
로그인, 실패한 로그인, 고부가가치 트랜잭션 및 기타 유형의 이벤트가 기록되지 않는 경우
경고 및 오류로 인해 부적절하거나 불분명하거나 메시지가 생성되지 않는 경우
의심스러운 활동에 대해 API 및 응용 프로그램 로그를 검사하지 않는 경우
로그만 로컬로 저장하는 경우
경고 임계 값 및 응답 에스컬레이션 프로세스가 제정되지 않는 경우
예방방법
-의심스럽거나 악의적인 계정을 발견할 수 있는 충분한 사용자 컨텍스트로 모든 로그인, 액세스 제어 및 서버 측 입력 유효성 검사 실패를 기록하기
-로그 관리 솔루션에서 로그를 쉽게 사용할 수 있는 형식으로 사용하기
-로그 데이터를 제대로 인코딩하여 Logging 또는 모니터링 시스템에 대한 Injection 이나 Attack을 설정하기
-변조 또는 삭제를 방지하기 위해 추가 전용 데이터베이스 테이블과 같은 트랜잭션에 대한 무 결성 제어가 있는 추적 등을 구현하기
-의심스러운 활동을 감지하고 신속하게 대응할 수 있도록 효과적인 모니터링 및 경고를 설정하기
-사고 대응 및 복구 계획을 도입하거나 채택하기
A10:2021 Server-Side Request Forgery (SSRF)
원격 리소스를 가져올 때 웹 응용 프로그램이 사용자가 제공한 URL의 유효성을 검사하지 않으면 서버 측 요청 위조 문제가 발생한다
이를 통해 공격자는 방화벽, VPN 또는 다른 유형의 네트워크 액세스 제어 목록(ACL)으로 보호되더라도 응용 프로그램에서 예기치 않은 대상으로 만든 요청을 강제로 보낼 수 있는 문제 이며 URL 가져오기는 최신 웹 응용 프로그램 간에 일반적인 기능으로, SSRF의 인스턴스가 증가한다
최근 아키텍처와 클라우드 서비스의 복잡성이 증가함에 따라 이러한 서비스도 더욱 심각해지고 있습니다.
예방 방법
네트워크 계층에서 의 예방->
별도의 네트워크에서 원격 리소스 액세스 기능을 분할하여 SSRF의 영향을 줄이기
네트워크 정책 또는 네트워크 액세스 제어 규칙을 "기본적으로 거부" 설정하여 필수 트래픽을 제외한 모든 트래픽 차단하도록 하기
응용 프로그램에 따라 방화벽 규칙에 대한 소유권 및 수명 주기 소개하기
방화벽에서 허용되고 차단된 네트워크 흐름을 모두 기록하기
응용 프로그램 계층에서 예방->
클라이언트에서 제공한 모든 입력 데이터를 검증하기
양수 허용 목록을 사용하여 URL 스키마, 포트 및 대상을 적용하기
클라이언트에 원시 응답을 보내지 않기
HTTP 리디렉션 비활성화하기
URL 일관성을 확인하여 DNS 재구속 및 "검사 시간, 사용 시간"레이스 조건과 같은 공격을 피하도록 하기
거부 목록이나 정규 식을 사용하여 SSRF를 완화하지 않기
기타 가능한 조치->
다른 보안 서비스를 배포하는 대신 전면 시스템의 로컬 트래픽 제어하기
매우 높은 보호를 위해 전용 및 관리 가능한 사용자 그룹이 있는 독립적인 시스템에 네트워크 암호화를 사용하기
'기타' 카테고리의 다른 글
Windows 기본 보안설정 (0) | 2022.02.24 |
---|---|
tomcat -> server.xml 기본 구성요소 (0) | 2022.02.21 |
Nginx.conf 간결정리 (0) | 2022.02.21 |
파일 디스크립터 (0) | 2022.02.21 |
Centos7 su vs sudo (0) | 2022.02.21 |