Open Web Application Security Project. 웹 어플리케이션 보안 분야에서 누구나 자유롭게 이용할 수 있는 기사, 방법론, 문서, 도구, 기술들을 발굴하는 온라인 커뮤니티
OWASP Top10 으로 알려져 있는 가장 중요한 10가지의 웹 어플리케이션 보안 결함 순위를 공개
1. Injection
공격자가 웹 어플리케이션으로 비정상적인 명령어, 쿼리 등을 보내 시스템에 접근할 수 있는 취약점. 공격자는 개발자의 의도와는 다른 접근으로 시스템의 데이터를 변조, 수정, 유출하는 악의적인 행동을 할 수 있다. 대표적으로 SQL Injection 이 있음.
- 웹 어플리케이션 로직에서 데이터를 분리
- 데이터 노출을 제한하는 설정을 구현
- 최소 권한의 원칙
2. Broken Authentication(취약한 인증)
인증 및 세션 관리와 관련된 웹 어플리케이션의 기능이 잘못 구현되어 공격자가 암호, 키 또는 세션 토큰을 위험에 노출시키거나 일시적 또는 영구적으로 다른 사용자의 권한을 획득하여 악용하는 취약점. 웹에서 매우 일반적으로 발견할 수 있으며 여러 유형이 존재
Brute force, 약한 암호화 사용, 세션 ID 를 관리하지 않는 경우
- MFA 적용
- 관리자의 경우 기본 자격 증명을 사용하지 않을 것
- 취약한 암호 검사
- 모든 결과에 동일한 메시지 사용(ID 가 올바르지 않습니다 -> X, ID 혹은 Password 가 올바르지 않습니다 -> O)
- 로그인 실패시 계정을 제한하거나 지연
- 세션 관리
3. Sensitive Data Exposure(민감한 데이터 노출)
개인 식별 정보 호근 신용 정보가 대표적인 민감 데이터. 웹 어플리케이션마다 중요한 민감 데이터를 취급하고 있을 것이며 이를 올바르게 보호하지 않는다면 공격자에게 노출될 수 있음. 민감한 데이터 노출은 저장되어 있는 데이터일 수도 있고 전송중인 데이터일 수도 있음.
데이터의 평문 전송이 그 예이며, 많은 웹 어플리케이션의 암호화되지 않는 평문 데이터들이 공격자에게 노출되어 있음
- 어플리케이션 처리, 저장 또는 전송한 데이터를 분류
- 개인정보보호법, 규제 요구 사항 또는 비즈니스 요구 사항에 따라 민감한 데이터 식별
- 분류에 따라 컨트롤 적용
- 민감한 데이터를 불필요하게 저장하지 않음
- 최신의 강력한 표준 알고리즘, 프로토콜 및 키 사용
- PFS(Perfect Forward Secrecy) 암호, 서버별 암호 우선순위 지정 및 보안 매개변수를 사용하는 TLS 와 같은 프로토콜로 모든 전송 데이터를 암호화
- HTTPS 와 같은 지시문을 사용하여 암호화
- 민감한 데이터가 포함된 응답에 대하여 캐싱을 비활성화
4. XML External Entites(XXE)
취약하게 설정된 XML parser 에 의해 공격자가 XML 문서에서 외부 엔티티를 이용하여 공격자가 의도하는 외부 URL 을 실행시킨 뒤, 서버의 로컬파일 정보 등을 출력하거나 DoS 공격
- JSON 과 같은 단순한 데이터 형식을 사용하고 민감한 데이터의 직렬화를 하지 않는다
- 응용 프로그램 또는 기본 운영체제에서 사용중인 XML 프로세서 및 라이브러리를 패치하거나 업그레이드
- XML 문서, 헤더 또는 노드 내에서 악의적인 데이터를 방지하기 위해 화이트리스트 서버 측 입력 유효성 검사, 필터링 또는 삭제
5. Brocken Access Control(취약한 접근 통제)
인증된 사용자가 수행할 수 있는 작업에 대한 제한이 제대로 적용되어 있지 않다면, 공격자는 이를 악용하여 다른 사용자 계정에 접근하거나 중요 파일 알람, 다른 사용자 데이터 수정, 액세스 권한 변경 등과 같은 악의적인 행위가 가능.
접근 제한이 제대로 되어있지 않은 관리자 페이자는 공격자의 공격 루트가 됨. SSH, FTP 와 같이 서버에 액세스할 수 있는 서비스들도 접근 제한이 제대로 되어 있지 않다면 공격자에게 악용될 수 있음
- 최소 권한 부여
- 필요하지 않은 계정 삭제
- 불필요한 서비스 제거
- 공용 리소스를 제외한 나머지 리소스를 deny
- 웹 서버 디렉토리 목록을 비활성화, 파일 메타 데이터 및 백업 파일이 웹 루트 내에 없는지 확인
- 액세스 제어 실패를 기록, 관리자에게 경고
- 로그아웃 후, JWT 토큰 무효화
- 개발자와 QA 는 기능적 액세스 제어 장치와 통합 테스트를 수행
6. Security Misconfiguration(잘못된 보안 구성)
안전하지 않은 기본 구성, 불완전한 구성 또는 임시 구성, 개방된 클라우드 스토리지, 잘못 구성된 HTTP 헤더 및 민감한 정보가 포함된 자세한 에러 메시지 등으로 인한 취약점. 불필요한 기능(포트, 서비스, 페이지, 계정) 등이 활성화되어 있으면 공격자의 공격 루트가 됨. 또한 자세한 오류 메세지는 Blind SQL Injection 과 같은 공격에 사용될 수 있음
7. Cross-Site Scripting(XSS)
공격자가 피해자의 브라우저에 악의적인 스크립트를 넣는 공격 기법. 공격자는 피해자의 브라우저에 스크립트를 실행하여 사용자 세션 탈취, 웹 사이트 변조, 악의적인 사이트로 이동할 수 있도록 허용할 수 있음.
- XSS 를 자동으로 이스케이프하는 프레임웨크를 사용
- HTML 출력의 컨텍스트를 기반으로 신뢰할 수 없는 HTTP 요청 데이터를 이스케이프
- CSP(Contents Security Policy)를 활성화
8. Insecure Deserialization(안전하지 않은 역직렬화)
- 직렬화 : 객체를 직렬화하여 전송 가능한 형태로 만드는 것
- 역직렬화 : 저장된 파일을 읽거나 전송된 스트림데이터를 읽어 원래 객체의 형태로 복원하는 것
데이터를 역직렬화하는 과정에서 원격코드 실행이나 권한 상승 등의 취약점이 발생할 수 있음
- 디지털 서명 같은 무결성 검사를 구현
- 개체 생성 전에 역직렬화 중에 엄격한 형식 제약 조건을 적용
- 가능한 경우 낮은 권한 환경에서 역직렬화하는 코드를 격리하고 실행
- 역직렬화하는 컨테이너 또는 서버의 트래픽을 제한하고 모니터링
9. Using Components with Known Vulnerabilities(알려진 취약점이 있는 구성요소 사용)
라이브러리, 프레임워크 및 다른 소프트웨어 모듈 같은 컴포넌트는 어플리케이션과 같은 권한으로 실행됨. 취약한 컴포넌트가 악용된 경우, 심각한 데이터 손실을 일으키거나 서버가 장악됨. 알려진 취약점이 있는 구성 요소를 사용하는 어플리케이션과 API는 어플리케이션 보안 수준을 약화시키고 다양한 공격과 영향을 줄 수 있음
- 공식 소스를 통해서 패치를 수행한다.
- 불필요한 종속성을 제거한다.
- 클라이언트와 서버 측에 모든 구성요소의 인벤토리를 보유한다.
- CVE 및 NVD 와 같은 소스를 모니터링하여 구성요소의 취약성을 확인한다.
10. Insufficient Logging & Monitoring(불충분한 로깅 및 모니터링)
불충분한 로깅 및 모니터링, 사고 대응의 비효율적인 통합 또는 누락과 함께 공격자는 시스템을 추가로 공격하고 지속성을 유지하며 더 많은 시스템을 중심으로 공격할 수 있도록 만들고, 데이터를 변조, 추출 또는 파괴할 수 있음
댓글
댓글 쓰기