본문 바로가기

4-3. 2023-2 심화 스터디/웹 취약점 분석

[2023.10.14] 드림핵 웹해킹 서버/클라이언트(스테이지 4개) 2

<서버>

Business Logic Vulnerability

  • Business logic(비즈니스 로직): 규칙에 따라 데이터를 생성, 표시, 저장, 변경하는 로직, 알고리즘 등을 말한다.
  • Business Logic Vulnerability(비즈니스 로직 취약점): 정상적인 비즈니스 로직을 악용하는 것을 의미한다. 인젝션, 파일 관련 취약점들은 사용자의 악의적인 데이터가 서버의 시스템 상에서 악영향을 미치는 공격을 수행하지만, 비즈니스 로직 취약점은 서비스의 기능에서 적용되어야 할 로직이 없거나 잘못 설계된 경우 발생하게 된다.
  • 예) 후기 작성 시 적립금 지급 이벤트 후기 작성 후 100 포인트를 지급받고, 후기를 삭제한 후 다시 후기를 작성하여 100 포인트를 계속 지급받을 수 있는 취약점 발생 -> 후기 삭제기능에 -100 포인트를 추가하여 Business Logic Vulnerability 방지

IDOR (Insecure Direct Object Reference)

  • Insecure Direct Object Reference (IDOR) 취약점: 안전하지 않은 객체 참조라는 의미와 같이 객체 참조 시 사용하는 객체 참조 키가 사용자에 의해 조작됐을 때 조작된 객체 참조 키를 통해 객체를 참조하고, 해당 객체 정보를 기반으로 로직이 수행되는 것을 의미한다.
  • IDOR 취약점이 발생하는 주된 원인: 사용자의 입력 데이터에 의해 참조하는 객체가 변하는 기능에서 사용자가 참조하고자 하는 객체에 대한 검증이 올바르지 않아 발생한다.
  • 예) 계좌 금액 조회 기능에서 자신의 금액을 조회할 때, 자신의 Account Number 가 아닌 다른 사용자의 Account Number 을 입력하여 조회하면 다른 사용자의 금액도 조사할 수 있다.

IDOR 취약점 방어

  • 객체 참조 시 사용자의 권한을 검증하는게 가장 중요하다. 즉 사용자가 의도한 권한을 벗어나서 행동할 수 없도록 권한 등을 분리해서 관리하여야 한다.
  • 또한, 로그인 등의 기능을 통해 사용자 인증을 거친 후 사용하는 서비스에서는 사용자 식별을 위한 정보를 사용자의 입력 데이터로 구분하기 보다는 사용자가 요청 시 전달하는 세션을 통해 서버 내에서 처리하는 것이 안전하다.
  • 이 외에도 객체를 참조하기 위해 사용하는 객체 참조 키를 단순한 숫자가 아닌 무작위 문자 생성 등을 통해 악의적인 공격자가 객체에 참조하기 위한 객체 참조 키를 추측하기 어렵게 만드는 방법도 있다.

 

Race Condition

  • Race Condition: 공유 자원 처리 과정에서 해당 자원에 대한 동시다발적인 접근으로 인해 발생하는 취약점.
  • 데이터베이스 또는 파일 시스템과 같이 웹 어플리케이션에서 공유하는 자원들에 대한 접근 과정에서 데이터를 참조하는 타이밍의 차이로 인해 취약점이 발생하게 된다.
  • 주로 검증 과정에서의 데이터와 수정 과정의 데이터의 차이로 인해 웹 어플리케이션에서 의도하지 않은 흐름으로 진행하게 된다. 또한, 비즈니스 로직의 잘못된 순서로 인해 취약점이 발생하기도 한다.
  • 예) 사용자의 잔액을 확인하는 과정과 차감하는 과정 사이인 재고 확인 과정에서 시간 지연 발생, 잔액 확인 과정 이후 잔액이 차감된다는 점을 이용하여 현재 잔액보다 더 많은 금액의 상품을 구매할 수 있다.

Race Condition 취약점 방지

  • 레이스 컨디션 취약점으로부터 안전하게 보호되어야하는 로직들은 하나의 접근이 끝난 후 다음 접근을 처리하도록 쓰레드 락 등을 통해 동시 다발적인 접근을 방지하여야 한다.
  • 또한, 레이스 컨디션 취약점을 발생시키기 위해서는 다량의 접근이 필요하다는 점을 이용하여 특정한 행위에 요청을 할 시에는 CSRF 토큰, 캡차 등을 통해 다량의 접근을 방지하는 방법을 통해 웹 어플리케이션을 보호할 수 있다.
  • * 캡차: 컴퓨터와 사람을 구분짓기 위한 완전 자동 튜링테스트. (예) 9 칸 사진에서 도로 표지판을 고르시오

 

Misconfiguration

MIsconfiguration (잘못된 설정) 취약점: 모든 웹 어플리케이션 계층에서 발생할 수 있다. 소스코드 상에서 존재하는 복잡한 로직에 의해 발생하는 취약점이 아니고, 간단한 설정 오류로 인해 발생한다.

따라서, 검수할 때는 기본 메뉴얼에 존재하는 룰을 잘 따랐는지만 확인하면 돼 자동화된 도구로 발견하기 쉽다.

 

부주의로 인해 발생하는 문제점

메뉴얼에 존재하지 않은 설정이거나 개발자의 부주의로 인해 설정 유무를 알지 못한 상태에서 서비스 할 경우 자주 발생한다.

 

1. 권한 설정 문제

- 잘못된 권한 설정-> 웹 서버를 운용하는 시스템 또는 어플리케이션 상에서 필요 이상의 권한을 부여하는 경우 발생

- 기본 계정-> 프레임워크 등에서 기본적으로 제공하는 계정을 삭제하지 않아 문제가 발생

2. 기본 서비스 -> 서비스 운용 시 사용하는 시스템 또는 어플리케이션에서 개발자가 설정하지 않아도 기본적으로 제공되는 기능에 의해 문제가 발생

3. 임시/백업 파일, 개발 관련 파일

-> 웹 서버 디렉토리내에 임시파일이나 백업파일이 존재한다면 디렉토리 스캐너를 통해 파일이 유출될 수 있음

 

편의성을 위한 설정에 의해 발생하는 문제점

개발자를 위한 설정이 서비스 환경에도 켜져있어 공격자가 이를 통해 시스템 내부의 정보를 알아내 추가적인 공격에 사용될 수 있다.

 

메뉴얼과 실제 구현체의 차이로 인해 발생하는 문제점

메뉴얼에 설명되어있는 대로 사용했지만 중의적 표현이 존재하거나 잘못 설명되어 있을 때 발생한다.

 

해당 코드나 설정에 대한 이해 없이 사용해 발생하는 문제점

취약점이 존재하는 예제 코드, StackOverflow 답변등을 이해 없이 카피하여 사용하거나 메뉴얼에 존재하는 권고 설정을 무시한 채 사용해 발생한다.

 

 

<클라이언트>

CSRF/CORS Bypass

CSRF Token 오용

  • CSRF Token: 같은 오리진에서만 접근 가능한 형태로 특정 토큰을 저장해두고 HTTP 요청을 전송할 때 함께 전송한다.
  • 웹 서버는 전송한 토큰을 이용하여 제 삼자가 아닌 이용자로부터 요청이 왔다는 것을 인증할 수 있다.
  • 암호화 방식과 달리 추가적인 사용자 상호작용 불필요
  • CSRF Token 사용 시 주의해야 할 점에는 짧은 Token, 예측 가능한 CSRF Token, CSRF Token 유출, 긴 유효시간을 가진 CSRF Token이 이에 해당한다.

CORS Vulnerability

  • CORS: SOP 보안 정책을 우회하여 Cross Origin간 자원을 공유하기 위한 방법 중 하나
  • CORS 기술의 사용에 있어 발생할 수 있는 취약점의 종류에는 현재 사이트에서 다른 사이트로 정보 유출, 다른 사이트에서 현재 사이트 변조가 있다.
  • Window.postMessage API: 다른 오리진 간에 메시지를 주고받을 수 있는 API
  • postMessage를 통해 message로 문자열뿐만 아니라 객체 또한 주고받을 수 있으나, 보안을 위해 함수, 객체, 프로토타입 및 속성 정보는 보낼 수 없다.
  • JSONP: JSON with Padding으로 CORS 기술 도입 전 SOP를 우회하기 위해 사용한 방식이다.
  • JSONP API와 유사하나, 응답 데이터를 특정 콜백 함수를 호출하는 코드로 감싸고 요청시 XHR이 아니라 스크립트를 포함시켜 동작한다는 점이 다르다.

Client Side Injection

  • Client Side Template Injection은 이용자의 입력값이 client side template framework에 의해 템플릿으로 해석되어 렌더링될 때 발생한다. 개발의 편의성을 높여주는 프레임워크지만 잘못된 방식으로 사용할 경우에는 XSS 취약점까지 연계하는 것이 가능하다
  • Vue: 2014년 출시된 프론트엔트 프레임워크로 오픈소스 자바스크립트 프레임워크이다. 이용자 인터페이스나 Single Page Application을 빌드할 때 사용된다.
  • AngularJS: 2010년 출시된 타임스크립트 기반의 오픈소스 프론트엔트 프레임워크이다. CLI 도구에서 다양한 기능을 제공하기 때문에 개발을 편리하게 해주는 프레임워크 중 하나이다.

CSS Injection

CSS는 HTML로 정의된 문서를 다채롭게 하는 역할을 함

CSS Injection –데이터 탈취(입력 박스 내용 탈취)

- CSS Attribute Selector(특정 선택자)

-> Elementattributeselection할 수 있는 기능을 제공

-> Elementattributeselection할 수 있는 기능을 제공

-> [attr]: attr이라는 이름의 특성을 가진 요소 선택

-> [attr=value]: attr이라는 이름의 특성값이 정확히 value인 요소를 선택

-> [attr~=value]: attr이라는 이름의 특성값이C 정확히 value인 요소 선택, attr 특성은 공백으로 구분한 여러 개의 값을 가질 수 있음

-> [attr^=value]: attr이라는 특성값을 가지고 있으며 접두사로 value가 값에 포함되어 있으면 이 요소 선택함

-> [attr$=value]: attr이라는 특성값을 가지고 있으며, 접미사로 value가 값에 포함되어 있으면 이 요소 선택