OWASP Top 10에 포함되지 않은 10가지 일반적인 웹 취약점
모니터랩 Threat analysis
채명훈 전임
OWASP Top 10 은 익히 알려진 바와 같이 전문가 커뮤니티에서 수집한 웹 어플리케이션에 대한 10가지 보안 위험 순위입니다. 순위는 2004년부터 약 3년 ~ 4년 주기로 갱신되고 있습니다. 2021년에 새로운 순위가 공개될 것으로 예상됩니다. ( 2004, 2007, 2010, 2013, 2017 ~ )
- Injection
- Broken Authentication
- Sensitive Data Exposure
- XML External Entities (XXE)
- Broken Access Control
- Security Misconfigurations
- Cross-Site Scripting (XSS)
- Insecure Deserialization
- Using Components with Known Vulnerabilities
- Insufficient Logging and Monitoring
해당 리스트는 OWASP Top 2017으로서 웹 어플리케이션에 대한 다양한 위협 중 일부분입니다. Top 10을 벗어난 위협들은 비교적 덜 강조되는 경향이 있습니다. 따라서, 신규 OWASP Top 10이 공개될 것으로 예상되는 이 시점에, OWASP Top 2017에 포함되지 않은 기타 위협들을 알아봅니다.
- Buffer Overflow
메모리 읽기 및 쓰기에 대한 어플리케이션의 메모리 할당을 다룹니다. 버퍼가 수용할 수 있는 것보다 많은 데이터로 블록을 채우려 할 때 오버 플로우가 발생합니다. 정교하게 만들어진 입력을 취약한 어플리케이션에 주입될 때 서버가 중단되거나 악성코드가 실행될 수 있습니다.
- Path Traversal
파일의 경로를 조작하여 허용된 디렉토리 외부의 디렉토리 또는 파일에 대한 경로를 입력할때 발생하는 취약점입니다. 공격자는 대상 시스템에서 임의의 파일에 접근할 수 있습니다.
- Process control
프로세스 제어 취약점은 일반적으로 신뢰할 수 없는 출발지에서 데이터를 어플리케이션으로 전송할 때 발생합니다. 공격자는 명령을 전송하여 프로그램에서 실행되게 합니다. 프로그램이 실행하는 명령이나 환경을 변경합니다. 명령어 주입 공격과 연관이 있습니다.
- Memory leak
메모리 누수는 프로그램이 더이상 필요하지 않을 때 할당된 메모리 블록을 해제하지 못하는, 의도하지 않은 메모리 소비를 뜻합니다. 메모리 누수가 많아질 경우 어플리케이션이 중단되거나 로드 시간이 늘어납니다. 일반적으로 오류 조건 및 예외 상황에 대한 처리 미흡, 메모리 해제를 담당하는 포인트에 대한 혼란으로 발생합니다.
- Click Jacking
사용자가 어떠한 페이지를 클릭할 때, 함정 사이트를 클릭하도록 속입니다. 사용자는 일반 UI를 사용하고 있다고 생각하지만, 실제로는 투명하게 처리된 숨겨진 UI가 있습니다. 프레임을 통해 다른 웹 페이지 내에서 페이지를 표시하는 기능인 HTML iframe 요소에서 발생합니다. 투명하게 처리된 함정 페이지를 일반 페이지와 겹쳐 출력합니다. X-Frame-Options 헤더를 사용하여 예방할 수 있습니다. 주류 브라우저들은 해당 기능을 모두 지원합니다.
- SSRF injection
OWASP Top에 새롭게 올라갈 것으로 예상되는 취약점입니다. Server Site Request Forgery(서버 측 요청 위조)는 서버 측 어플리케이션이 공격자가 입력하는 임의의 URL에 HTTP 요청을 전송하도록 유도할 수 있는 취약점입니다. 어플리케이션이 어떠한 내외부 URL에서 데이터를 가져오거나, 읽는 기능이 있을 수 있습니다. 이러한 기능의 취약점을 이용하여, 어플리케이션이 선택하는 URL을 공격자가 원하는 URL로 선택하도록 유도할 수 있습니다. 어플리케이션이 통신할 수 있는 다른 백엔드 시스템에서 무단 액세스 또는 작업이 발생하거나 임의의 명령이 실행될 수 있습니다.
- CRLF Injection
CRLF는 Carriage Return + Line Feed를 나타냅니다. CRLF 주입 공격은 HTTP 매개변수 혹은 URL을 수정하여 진행됩니다. 이를 통해 코드가 실행되거나 데이터 노출 , 로그 파일 조작 등이 발생할 수 있습니다. 또 다른 피해 예시로, 주입된 CRLF가 응답에 포함되는 HTTP Response Splitting (응답 분할) 공격이 발생할 수 있습니다. 프록시, 캐시 및 브라우저에 의해 데이터의 끝으로 해석되어 혼란을 야기할 수도 있습니다.
- Information exposure via query strings
쿼리 문자열을 통한 정보 노출 취약점은 민감 데이터가 URL의 매개 변수로 전달되는 경우입니다. 이를 통해 공격자는 사용자 이름, 암호, 토큰 (authX), 데이터베이스 세부 정보 및 기타 민감한 데이터를 얻을 수 있습니다. HTTPS를 사용하는 것만으로는 취약점이 해결되지 않습니다. 쿼리 매개 변수에 데이터가 입력되므로 HTTPS를 사용하더라도 공유 시스템, 웹 로그, 브라우저 히스토리, 캐시 등에 데이터가 노출됩니다. 이를 방지하는 방법은 POST 양식의 body 데이터로 전송하는 것입니다.
- HTTP Host header attacks
호스트 헤더 삽입 공격이라고도 합니다. HTTP 헤더 중 Host 헤더를 Server Side에서 안전하지 않은 방법으로 처리할 때 발생합니다. 서버가 Host 헤더를 신뢰함과 동시에 유효성 검사를 정확하게 하지 못하는 경우, 공격자는 서버가 비정상적으로 동작하도록 조작하는 유해한 Host 헤더를 주입할 수 있습니다.
- Web cache poisoning
웹 캐시 포이즈닝은 캐싱 서버 혹은 웹서버의 캐시 동작을 악용하여 피해자에게 유해한 응답을 전송하게 하는 취약점입니다. 캐시를 오염시켜 다른 피해자에게 제공되는 오염된 캐시 응답을 보냅니다. 헤더에 포함되는 XSS공격으로 볼 수도 있습니다.
대부분의 웹 어플리케이션은 여전히 완벽하지 않습니다. 수많은 웹 취약점이 지금도 보고되고 있습니다. 웹 어플리케이션이 현대화되고, 새로운 기능들이 추가되고 고도화 되면서 새로운 취약점이 나타날 수도 있으며, 이는 다음 OWASP Top 10 목록에 추가될 수 있습니다. 특히 기 소개해드린 SSRF 취약점은 최근 많은 취약점이 보고되고 있어, 그 가능성이 더 높습니다. 그러므로 개발자, 보안 담당자 혹은 관계자는 OWASP 목록에 보안 범위를 한정하는 것이 아니라 다방면으로 고려하여 원활하고 확장 가능한 전략을 세우는 것이 필요합니다.