웹 취약점

Bam·2025년 12월 22일

CS

목록 보기
32/35
post-thumbnail

웹 취약점

국제웹보안표준기구 OWASP에서는 여러 분야(웹, 데스크톱 앱, 모바일 등)에 대한 열 가지 취약점을 발표하고 있습니다.

https://owasp.org/www-project-top-ten/
웹의 상위 10가지 취약점

시간 흐름에 따라 구분이 세부화/통합, 기준 변경이 되므로 주요하게 등장하는 열가지 웹 취약점에 대해 알아보도록 하겠습니다.

1. 명령 삽입 취약점

클라이언트의 요청 처리를 위해 파라미터에 특정 코드를 실행할 수 있는 내용이 포함되는 경우가 있습니다. 이런 경우 파라미터를 따로 처리해야하며, 그렇지 않은 경우 삽입 공격에 취약점이 발생합니다.

삽입 공격은 SQL, OS, LDAP(Lightweight Directory Access Protocol) 등 웹을 통해 명령이 전달되는 형태라면 공격이 가능하지만 주로 DB에 접근을 하는 SQL Injection 공격이 일반적으로 수행됩니다.

주로 웹 서버에서 DB로 전송되는 SQL 쿼리에는 아이디, 패스워드 등과 같은 파라미터들이 사용되는데 SQL 삽입 공격은 전송되는 인수에 추가적인 실행을 위한 코드를 삽입하여 공격하는 것을 의미합니다.

2. 인증 및 세션 관리 취약점

인증 및 세션 관리 기능이 제대로 구현되지 않는다면 공격자가 로그인 등의 인증 절차를 무단으로 통과하거나 타인의 인증 정보로 페이지를 접근할 수 있게 됩니다.

대표적인 취약한 인증으로는 패스워드 설정으로 패스워드를 간략하게 설정(ex) 0000, 1234, admin)하는 경우 공격자가 쉽게 관리자 또는 사용자 권한을 획득하여 사용할 수 있게 됩니다.

또한 취약한 세션 관리로는 최초 인증 이후 클라이언트에 인증과 증명 역할을 넘기는 경우가 해당됩니다. 이 경우 클라이언트 측에서 최초 로그인으로 유효한 세션을 연결 한 뒤 인증 정보를 속여 악용이 가능해집니다.

3. XSS 취약점

XSS (Cross Site Scription)은 공격자가 작성한 스크립트가 다른 사용자에게 전달되는 것으로, 클라이언트가 서버를 신뢰한다는 특징을 이용한 공격입니다.
XSS는 다음과 같이동작합니다.

  1. 공격자가 XSS코드가 포함된 이메일을 송신합니다.
  2. 일반 사용자가 XSS 코드가 포함된 메일을 통해 웹 사이트에 접근하게 됩니다. 이때 일반 사용자는 본인이 XSS 코드에 접근하고 있다는 사실을 알지 못합니다.
  3. 사용자 브라우저는 정당한 웹 사이트를 로드합니다. 이때 사용자의 XSS 코드가 실행됩니다.
  4. XSS 코드가 실행된 결과가 공격자에게 전달됩니다.

4. 취약한 접근 제어

취약한 접근 제어는 인증된 사용자가 수행할 수 있는 것에 대한 제한이 제대로 적용되지 않는 것을 의미합니다. 이를 통해 접근 권한이 없는 기능을 사용하거나 데이터를 무단 열람할 수 있게 됩니다.

관리자 페이지가 추측하기 쉬운 URL을 사용하거나, 인증이 필요한 페이지에 대해 인증을 우회하여 접속할 수 있는 경우에 주로 발생하는 취약점입니다. 이를 방지하기 위해서는 권한이 필요한 페이지에 대해 세션 값을 확인하는 검증 로직을 따로 두어야합니다.

또한 웹 상 파일 다운로드 시에도 .., /와 같이 디렉토리 구조를 열 수 있는 문자를 필터링하지 않게되면 공격자가 웹 페이지의 특정한 파일 내용을 다운로드 받을 수 있게 됩니다.

5. 보안 설정 오류

일반적으로 발생하는 보안 설정 오류에는 다음과 같은 것들이 있습니다.

  • 디렉토리 리스팅
    디렉토리 리스팅 directory listing은 웹 브라우저에서 웹 서버의 특정 디렉토리를 열면 해당 디렉토리의 파일과 목록이 모두 나열되는 것을 의미합니다.

  • 백업/임시 파일의 존재
    웹 서버에 백업 또는 임시 파일을 삭제하지 않고 방치하는 경우가 있는데 이 경우 이 파일들을 통해 로직이나 DB 접속 정보와 같은 정보들이 탈취될 수 있습니다.

  • 주석
    웹 프록시를 사용하게되면 일반 사용자도 웹 애플리케이션 로직 코드의 주석을 확인할 수 있게 됩니다. 주석은 대부분의 경우 로직에 대한 설명, 정보 등을 담고 있어서 주석에 정보를 기록할 때는 주의하여야 합니다.

  • 파일 업로드 제한의 부재
    웹 서버의 가장 치명적인 취약점으로 클라이언트에서 서버로 임의의 파일들을 보낼 수 있다. 웹 서버에 악의적인 파일을 전송해 웹 서버를 장악하고 침투할 수 있기 때문입니다. 사용자가 파일을 첨부하는 형태가 아니어도 운영용 파일 업로드 코드가 노출되는 경우에도 위험에 노출될 수 있습니다.

  • 리버스 텔넷
    리버스 텔넷은 시스템 권한을 획득한 후 해당 시스템에 텔넷과 같이 직접 명령을 입력하고 확인할 수 있는 shell을 획득하는 방법으로, 방화벽을 가진 시스템을 공격하는 데 사용됩니다.

6. 민감한 데이터 노출

데이터의 중요도에 따라 암호화 로직을 설정하고 데이터 베이스 테이블 단위에서 암호화를 수행해야합니다. 암호화 수준이 낮거나 구조걱인 문제가 있는 경우 데이터가 복호화되거나 위/변조 될 수 있습니다.

7. 공격 방어 취약점

공격 방식이 복잡해짐에 따라 보안 솔루션만으로는 공격을 차단하기 어려워지고 있습니다. 이에따라 웹 애플리케이션 레벨에서도 탐지/로깅/응답/차단을 포함하도록 권고 되고 있습니다.

8. CSRF 취약점

CSRF (Cross Site Request Forgery)는 불특정 다수 사용자를 대상으로 로그인된 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위들을 하게 만드는 공격이며, 웹 사이트가 사용자의 브라우저를 신뢰하는 점을 이용한 공격입니다.

XSS 공격과 비슷하지만 CSRF 공격은 사용자가 악성 스크립트를 서버에 요청한다는 차이가 있습니다. (XSS는 클라이언트 측에서 악성 스크립트를 실행)

9. 취약 컴포넌트 사용

웹 환경이 다양해짐에 따라 다양한 라이브러리, 컴포넌트, 프레임워크, 모듈을 사용하고 있는데 이때 보안에 취약한 컴포넌트 등을 사용하는 경우에 데이터 손실, 서버 장악 등의 문제가 발생할 수 있습니다.

사용하고자 하는 컴포넌트 등의 보안 취약점을 충분히 검토 및 확인하고 사용해야 합니다.

10. 취약 API

마찬가지로 웹 환경이 다양해짐에 따라 다양한 웹 서비스 간의 연동이 많아지고 이 연동이 주로 API를 통해 이루어집니다. 이 경우에도 API의 보안 취약점 등을 충분히 검토 하고 사용하여야 합니다.


웹 취약점 보완

다음 세 가지 보완 방안을 통해 웹 취약점을 막을 수 있습니다.

특수문자 필터링

웹 해킹의 가장 기본적인 형태가 파라미터 조작이며, 이 조작을 위해 특수문자를 포함하게 되어 있습니다. 주요 특수문자와 관련 공격을 정리하면 다음과 같습니다.

  • XSS 공격에 주로 사용되는 특수문자들
    < > & " ? ' /

  • SQL Injection에 주로 사용되는 특수문자들
    ' = ; * . .. --

  • 디렉토리 탐색에 사용되는 특수문자
    /

서버 통제 적용

파일 업로드 제한, 특수문자 필터링을 적용할 때 주의할 점은 자바스크립트와 같은 CSS (Client Side Script) 기반 언어로 필터링을 수행하면 안됩니다. CSS 기반 언어는 웹 프록시를 통해 웹 브라우저에 전달되므로 이 과정에서 변조될 가능성이 있습니다.

필터링 로직은 ASP, JSP와 같은 SSS (Server Side Script)로 작성해야 합니다.

지속적인 세션 관리

URL 접근 제한에 실패하지 않기 위해서는 기본적으로 모든 웹 페이지에서 세션에 대한 인증을 수행해야합니다. 모든 페이지에서 일관성 있는 인증 로직을 적용하려면 기업 단위 또는 웹 사이트 단위에서 세션 인증 로직을 표준화하고, 개발 표준을 준수해야합니다.

0개의 댓글