웹 취약점에 대하여 2

3 분 소요

웹 애플리케이션 공격의 종류

해당 내용에 대해서는 기술적인 참고용으로서 테스트는 반드시 자신 소유의 사이트 혹은 테스트 허가를 받은 사이트에서만 확인할 수 있도록 주의.
공격 행위에 대한 책임은 공격을 행한 당사자에게 발생함.

사이트 간 스크립팅(XSS)

웹 애플리케이션이 사용자의 브라우저에서 스크립트를 실행한다는 점을 이용한 것이 핵심 작동원리

동적 생성된 스크립트를 누군가가 오염시키거나 수정할 수 있게되면 위험

크게 다음과 같은 세가지로 분류

  • 저장(코드 실행전 데이터베이스에 저장)
  • 반사(코드를 데이터베이스에 저장하지 않고 서버에 의해 반사)
  • DOM기반(코드를 브라우저에 저장하고 실행)

익스플로잇 예시

  • 웹 애플리케이션 소유자가 작성하지 않은 스크립트가 브라우저에서 실행
  • 눈에 띄지 않고 몰래실행되거나 사용자 입력이 있을때 실행
  • 웹 애플리케이션의 현재 데이터를 취득가능
  • 데이터를 악의적 웹서버와 자유롭게 송수신
  • UI에서 사용자 입력을 올바로 정제하지않은 결과로 발생
  • 세션 토큰을 훔치고 계정을 빼앗는데 사용될 수 있음
  • UI에 DOM객체를 그리는데 사용가능 완벽한 피싱 공격 가능

XSS 취약점은 스크립트 실행 싱크를 클라이언트에서 찾는것에 의존하므로 브라우저의 복잡한 사양으로 의도치않은 실행이 일어날수 있음

저장XSS

가장 일반적인 유형의 xss 공격 사용자가 업로드한 악의적 스크립트가 DB에 저장되어있다가 다른 사용자가 요청 조회할 경우 스크립트가 실행됨 스크립트 자체는 클라이언트에서 실행되지만 스크립트는 데이터 베이스에 저장하여 일반적으로는 스크립트가 있는지 확인하는 것으로 확인되지만 고급 xss 페이로드는 평문이 아닐수도있음(베이스64, 바이너리 등)

반사XSS

저장 XSS공격과 같이 작동하면서도 DB에 저장되지 않고 일반적으로 서버를 공격하지도않음 실행할 스크립트와 함께 렌더링할 메시지를 전달해주는 서버에 의존하지않고 브라우저의 클라이언트 코드에 직접적으로 영향을 준다.

링크의 정보를 브라우저 상에 표시하는 경우 링크에 스크립트 태그를 포함시켜 실행하도록 하는 방식으로서 URL에 의존하므로 쉽게 퍼트릴수 있으나 반사 XSS의 대부분은 배포하기 쉽지않으며 최종 사용자가 웹 폼에 자바스크립트를 붙여넣는것과 같은 추가행위가 필요하게 된다 탐지를 회피하는데는 좀 더 낫지만 많은 사용자에게 유포하기는 어렵다는 단점이 있음

DOM기반 XSS

반사 혹은 저장 방식을 취할수 있음 실행을 위해 브라우저 DOM싱크와 소스를 사용한다는 특징이 있음 서버와 전혀 상호작용을 취하지않음 window.location.search에 있는 질의 매개 변수가 DOM XSS의 소스가 될수 있음 해시도 동일함(window.location.hash) 입력값에 대해서 해시나 페이로드를 실행하는 경우 주입된 값을 실행해버리는 결과 초래

뮤테이션 기반 XSS

안전한 페이로드가 필터를 통과한뒤 안전하지 않은 페이로드로 변환 되는것이 작동원리 태그가 올바르게 구성되지 않은상태로 전달하여 DOM로딩시 최적화로 실행되도록 변환

사이트 간 요청 위조(CSRF)

브라우저의 작동 방식에 착안에 웹 사이트와 브라우저 사이의 신뢰관계를 이용. 안전을 확인하기 위해 사용하는 API호출이 브라우저를 과도하게 신뢰하는 것을 찾아내 링크를 만들고 수정하여 공격 브라우저에서 일어나는 요청이 눈에 띄지 않기 때문에 당하는 사람이 눈치채지 못하는 경우가 많음 CSRF공격을 규정하는 두가지요소

  • 권한상승
  • 요청이 일으키는 사용자계정

브라우저의 기본 HTTP요청이 GET요청이므로 URL매개번수를 수용하는 태그 등과 상호작용하여 DOM에 로딩될때 자동으로 요청하게되는 방식의 공격이 가장 쉬움

질의 매개변수 변조

CSRF GET은 인증된 사용자가 클릭했을때 상태를 변경하는 HTTP GET요청을 일으키는 악의적 링크를 퍼트림

GET 페이로드 바꿔치기

이미지 태그등은 src 엔드포인트에 get 요청을 시작가능 이미지 태그를 이용해 CSRF를 이용하여 사용자 상호작용 없이 CSRF시작가능 이는 URL매개변수를 사용하는 HTML 태그 대부분을 마찬가지로 악의적 GET요청을 일으키는데 사용가능

POST 엔드포인트에 대한 CSRF

보통 CSRF공격은 GET엔드포인트를 공략 하이퍼링크, 이미지, HTML 태그를 통해 HTTP GET 요청을 자동으로 시작하는 CSRF를 배포하기 쉽기때문

POST도 물론 가능하나 사용자 상호작용이 더욱 필요해짐

POST요청을 통한 CSRF공격은 대체로 브라우저 폼을 통해이뤄짐 스크립트없이 POST요청을 일으킬 수 있는 몇안되는 HTML객체중 form이 있기때문

브라우저에 렌더링되지않는 데이터를 뿌리기위해 폼에 hidden타입 어트리뷰트를 사용가능

XML 외부 엔티티(XEE)

애플리케이션 코드의 잘못 구성된 XML 파서에 의존하는 공격으로서 일반적으로 거의 모두가 XML 페이로드를 수용하는 API 엔드포인트로 발견됨 유사 SVG, HTML/DOM, PDF, RTF 등도 이에 포함 XXE 공격은 XML 명세에서 외부 파일을 임포트하는 특수 표기에 착안 파서의 간단한 설정으로도 충분히 방지할수 있음

직접 XXE

XML객체가 외부 엔티티 플래그를 가지고 서버에 전송된다음 파싱되어 외부 엔티티를 포함한 결과가 반환됨

간접 XXE

서버가 요청에 따라 XML 객체를 생성하는 경우 사용자가 제공한 매개변수를 포함하는 XML객체로 외부 엔티티 태그를 포함할 가능성이 있음 이런 경우는 현대적 소프트웨어와 레거시 소프트웨어 시스템을 함께 운영하는 케이스에서 많이 발생하고 있다. 내부에서 타 소프트웨어와 연동하기 위하여 XML로 페이로드를 변환하여 사용하는 경우 허점이 발생하게된다.

인젝션

인젝션 스타일 공격은 XXE 공격과 달리 약점에 의해 발생하는 것이 아닌 사용자 입력을 지나치게 신뢰하기 때문에 발생하게 된다.
클라이언트의 HTTP 요청을 파싱한 텍스트를 포함하는 서버 코드의 실행 결과로 발생하기에 애플리케이션 기능 이해가 필요함
데이터베이스는 방어 구성이 되어있지만 파서와 CLI의 경우는 문서를 찾기 힘든만큼 견고한 방어 메커니즘을 갖추지 않았을 가능성이 높음

SQL인젝션

HTTP 페이로드에서 SQL 문자열이 이스케이프 되어 최종 사용자를 대신해 커스텀 SQL 질의가 실행

코드인젝션

API 엔드포인트에서 호출한 명령줄 인터페이스가 정제가 충분하지 못한 예상치 못한 명령을 받아 의도치않은 실행을 발생시키는 것으로 이뤄짐 SQL인젝션은 일차적으로 인젝션 공격 이차적으로는 코드 인젝션 공격이며, 현재는 CLI 대상의 인젝션보다는 DB를 활용해 데이터를 저장하기에 SQL인젝션이나 그외 데이터베이스 인젝션을 접할 가능성이 있음

명령인젝션

API 엔드 포인트에서 커스텀 배시 명령을 추가하여 변조된 배시명령을 서버에 대해 실행하는 방식으로 이루어지는 공격 OS를 대상으로 하여 이루어지므로 치명적인 결과로 이어지며 이는 여러 공격 유형중 가장 위험한 유형에 속함. 다만 세부적인 권한 설정으로 어느정도 방지가 가능함

서비스거부(DOS)

서드파티 의존성 취약점 공격