웹 취약점에 대하여 1
개요
현재의 웹기술
동일 출처 정책(SOP)
서로 다른 출처를 엄격히 관리
콘텐츠 보안 정책(CSP)
웹 사이트 개발자가 스크립트를 HTML에서 인라인으로 실행할수 있는지와 같은 여러 보안 수준을 지정 가능
HTTP
네트워크를 통해 전송되는 데이터에 대한 엄격한 암호화를 SSL TLS같은 프로토콜을 적용
정리
웹 애플리케이션 코드의 취약점을 익스플로잇 하여 침입하는데 시간을 투자
역할 기반 액세스 제어
애플리케이션이 여러가지 권한으로 짜인것, 권한에 따라 읽기, 쓰기 등 세분화 시켜서 제어하는것
API 엔드포인트
클라이언트 애플리케이션이 API에 액세스할 수 있는 URL이다
REST API(표현상태 전송 API)
상태를 저장하지 않으며 다른 애플리케이션으로부터 요청을 처리하기 위해 존재
요청자에 대한 어떠한 정보도 저장하지않음
- 클라이언트와 독립적: 클라이언트를 API와 분리하되 엄격한 API구조를 따르므로서 클라이언트 애플리케이션이 데이터 베이스를 호출하거나 서버측 로직 자체를 수행하는 일 없이 쉽게 리소스 요청가능
- 상태를 저장하지않음: 입력을 받아 출력을 제공하는 역할만하며 클라이언트 연결과 관련해 어떠한 상태도 저장해서는 안됨. 권한 부여는 토큰화되어 요청시마다 전송
- 쉽게 캐시할수 있어: 캐시 가능 여부를 쉽게 펴시할 수 있어야.
- 특정 객체나 메서드를 정의해야함: 계층적으로 엔드포인트를 정의. 하나의 엔드포인트가 HTTP 동사를 여러개 가질수 잇음(GET, POST, PUT, DELETE 등)
과거에는 단순 객체 액세스 프로토콜(SOAP) 구조의 API를 사용. 이와 비교한 장점은 다음과 같음
- 기능이 아니라 대상 데이터를 요청
- 요청을 캐시하기 쉽다
- 확장성이 높다
JSON
공개 표준 파일 포맷
- 경량이다(네트워크 대역폭 절약)
- 파싱하기가 쉬움(클라이언트/서버 하드웨어 부하 경감)
- 쉽게 읽을수 있음
- 계층적이다(데이터간의 복잡한 관계 표현가능)
- JSON - 자바스크립트 객체 매우 유사하게 표현되어 브라우저에서 생성이 쉬움
자바스크립트
콘텍스트
함부에 따라 붙는 프로퍼티와 데이터 집합 고정된 것이 아니라 실행중 바뀔수 있으며 this를 사용해 참조
프로토타입
프로토타입을 수정하면 자식에게 전파됨 이를 사용해 프로토타입 오염이라는 특수한 공격 기법 사용가능 공격시 부모 자바스크립트 객체 수정함으로서 자식 객체기능이 원래 의도에서 벗어나게함
취약점을 찾기 위하여
다음과 같은 방식으로 맵 제작
서브도메인 찾기
정찰을 통해 서브도메인을 수집, 공격 백터를 찾는 방식으로 진행. 메일서버나 관리자용 백도어 같은 겉으로 드러나지않는 서버는 버그가 많아 애플리케이션 취약점을 찾아 익스플로잇(취약점공격)하기 쉬움
API 분석
일반적으로 REST 포맷이나 SOAP포맷을 따름 (REST가 더많고, 현재 웹 애플리케이션 API에 이상적인 구조로 평가)
- 각 동사에 요청, 일반적으로 1초면 api가 충분히 응답하고 남는 시간
- 로그인 가입 패스워드 재설정 같은 공통적으로 존재하고 공개되어있는 엔드포인트를 먼저 조사
- 안전한 애플리케이션은 일반적인 오류메시지만 나타내고 구체적으로 알려주지 않아야함 (메시지를 통해서 새로운 정보를 유추할수 없도록)
서드파티 의존성 검출
클라이언트 측 프레임워크 검출
vue의 경우
Vue.version Vue.config.devtools = true
로 검출가능
스크립트나 js 의 경우도 queryselectorAll 로 쉽게 검출가능함
서버측 프레임워크 검출
안전하게 구성되지 않은 웹 서버 패키지는 디폴트 헤더에 너무 많은 데이터 노출
X-Powered-By 헤더가 대표적인 예
어플리케이션 아키텍쳐 약점식별
xss, xxe, csrf 위험이 발생할수 잇는 여러계층
- API POST
- 데이터베이스 쓰기
- 데이터베이스 읽기
- API GET
- 클라이언트 읽기
메커니즘이 달라지면 검출할 수 있는 공격 페이로드도 달라짐 그 예로 헤드리스 브라우저는 스크립트 실행을 탐지 할 수 있지만 특정 브라우저 API에 버그가 있는경우 스크립트가 이 메커니즘을 우회할 수 있게된다
안전한 웹 애플리케이션은 여러계층에 보안 메커니즘이 있음 반대로 안전하지 않은 웹 애플리케이션은 보안 메커니즘을 한 두 계층에 두고 있다.
커스텀 DB, 커스텀 암호화, 특수 하드웨어 수준의 최적화가 많은 애플리케이션은 해킹 당하기 쉬워지는 문제가 발생