국제웹보안표준기구에서는 각 분야별 주요 취약점들을 발표하고 있습니다. 그 중 몇 가지 리스트로 작성해보면 아래와 같습니다.
1. Injection
클라이언트의 요청을 처리하기 위해 전달받은 인수에 특정 명령을 실행하는 코드를 포함시켜 공격하는 방법입니다. 이런 Injection 공격은 SQL, OS, LDAP 등 웹을 통해 명령을 전달하는 어떠한 경우에도 적용될 수 있습니다. 이를 필터링 하는 방법등을 준비해 놓지 않는다면 문제가 발생할 수 있습니다.
2. 인증 및 세션 관리 취약점 (Broken Authentication and Session Management)
인증이나 세션 기능이 미흡하다면 공격자가 허가되지 않은 여러 서비스에 접근하고 사용할 수 있습니다. 가장 대표적인 문제로 패스워드 설정으로서 패스워드를 취약하게 설정한 경우입니다. 사용자 데이터를 이용한 인증 취약점의 경우 서버에서 로그인된 사용자를 인증하기 위한 값으로 쿠키와 같은 세션 값을 클라이언트에게 전달합니다. 이 때 공격자는 이 값을 이용해 연결하게 됨으로서 실제 사용자의 요청인지 공격자의 요청인지 구별하기 어렵습니다. 이런 문제는 최초 인증 후에는 인증과 신분 증명을 위한 역할을 클라이언트에게 위임했기에 발생하는 문제입니다. 서버가 통제해야 할 기능과 정보를 편의를 위해 클라이언트에게 전달함으로서 위험한 결과를 초래할 수 있습니다.
3. XSS 취약점 (Cross-Site Scripting)
XSS 취약점은 공격자가 작성한 악성 스크립트가 다른 사용자에게 서버를 통해 전달되는 것입니다. 다른 사용자들은 웹 브라우저 내에서 검증없이 해당 스크립트가 수행되므로 많은 문제를 야기할 수 있습니다. XSS 취약점이 존재하는 서버에 공격자가 스크립트를 작성하여 저장하게 됩니다. 해당 웹 서비스를 이용하는 사용자는 자신이 게시글의 글을 읽는 등의 활동을 하며 인지도 하지 못한 채 스크립트 코드에 접근하게 됩니다. 웹 서버는 요청에 의해 코드가 포함된 데이터를 사용자에게 전달하고 시스템에선 전달받은 스크립트를 수행하게 되는 것입니다.
4. 취약한 접근 제어 (Broken Access Control)
인증된 사용자라 할지라도 접근하지 못하는 페이지들이 있습니다. 하지만 취약한 제어는 사용자가 접근할 수 없어야 하는 페이지도 접근할 수 있게 만드는 것입니다. 공격자는 이런 방법을 이용해 다양한 문제를 일으킬 수 있습니다. 권한 없는 기능을 사용할 수 있다는 것은 강력한 무기를 가지게 된것입니다. 관리자 페이지에 접근을 했는데 URL만 알고 있으면 접근이 가능하거나 관리자가 사용할 수 있는 모든 기능을 일반 사용자도 할 수 있는 등의 취약점입니다. 이러만 문제를 막기 위해 세션 값을 확인하는 방안이 필요합니다. 페이지 뿐만아니라 파일에도 적용됩니다. 웹 페이지 주소에서 확인 가능한 경로를 탐색하여 특정 파일을 다운로드 할 수도 있습니다.
5. 보안 설정 오류 (Security Misconfiguration)
웹 브라우저에서 웹 서버의 특정 디렉토리에 접근하게 되면 모든 파일 리스트를 확인할 수 있는 경우가 있습니다. 관리자가 의도하는 경우도 있지만 대부분 관리자의 인지하지 못하여 발생하는 문제가 대다수입니다. 또한 개발자가 백업 파일이나 임시 파일을 삭제하지 않고 방치함으로써 내부 정보를 획득할 수도 있습니다. 미흡한 주석관리도 문제가 될 수 있습니다. 웹은 누구나 볼 수 있기에 주석에 주요 로직이나 구조, 데이터를 작성해 놓게 되면 문제가 발생할 수 있습니다. 웹 서버에 어떠한 파일이라도 업로드 할 수 있도록 방치하는 것도 공격자에게 공격을 위한 빌미를 제공하는 것입니다. 악성 파일을 전송하여 서버에서 실행하게 된다면 내부 침투가 가능하게 됩니다. 이런 악성 파일 업로드를 통해 리버스 텔넷 공격등도 가능해집니다. 대부분 서버는 텔넷등의 포트로 서버에 접속하지 못하도록 방화벽을 사용하는데, 인바운드만 신경쓰게 되고 아웃바운드에 대해선 인식이 미흡하다면 악성 프로그램 업로드로 서버에서 공격자에게 텔넷을 연결하도록 할 수 있습니다.
6 민감한 데이터 노출 (Sensitive Data Exposure)
사용자의 주요 정보를 암호화하지 않고 다룸으로서 데이터 유출 시 추가적인 문제가 발생할 수 있습니다. 정보를 서버-클라이언트 간 송수신하는 경우에도 암호화 알고리즘이 미흡한 경우에도 공격 대상이 될 수 있습니다.
7. 공격 방어 취약점 (Insufficient Attack Protection)
웹 어플리케이션 레벨에서 기본적인 유효성 검사나 침입 탐지, 로깅, 공격 차단등의 로직을 포함해야 합니다.
8. CSRF 취약점 (Cross-Site Request Forgery)
CSRF는 불특정 대상에게 공격자가 원하는 작업을 수용하도록 만드는 공격방법입니다. 은행을 이용하는 불특정 대상에서 자신도 모르는 사이 공격자에게 돈을 송금하는 등의 행위를 하게 합니다. 위에서 살펴본 XSS 공격과 매우 유사하지만 스크립트가 사용자가 아닌 서버에서 수행되도록 하는 구조적 차이가 있습니다.
9. 취약점이 있는 컴포넌트 사용 (Using Components with Known Vulnerabilities)
웹 개발자들은 다양한 오픈소스 라이브러리, 프레임워크 등을 사용하게 됩니다. 본인이 알지못하는 취약점이 있는 컴포넌트들을 사용함으로서 문제를 발생시킬 수 있습니다. 충분한 보안측면에서의 검토가 필요합니다.
10. 취약한 API (Underprotected APIs)
웹 서비스 간의 연동이 점점 많아지게 되고 이런 상호작용은 각 서비스에서 제공하는 API를 이용하여 이루어지는 경우가 많습니다. 이 경우에도 취약점이 있는 컴포넌트와 마찬가지로 문제가 발생할 수 있습니다.
참고 : 정보 보안 개론 3판 | 양대일 지음
'ETC > Security' 카테고리의 다른 글
[정보보호개론] Session Hijacking 공격 (0) | 2018.12.04 |
---|---|
[정보보호개론] 스푸핑 공격 (Spoofing) (0) | 2018.11.07 |
[정보보호개론] 스니핑 (Sniffing) (0) | 2018.11.07 |
[정보보호개론] SSL / TLS (1) | 2018.11.04 |
[정보보호개론] 인증 (Authentication) (0) | 2018.11.04 |