본문 바로가기

5. 방학 활동/개념 정리

[2023.02.02] 워게임&CTF 스터디 1팀 웹해킹 개념정리]

○ CSRF

웹 어플리케이션 취약점 중 하나

인터넷 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격

→ 희생자의 권한을 도용하여 중요기능을 실행하는 것이 가능해진다.

 

조건)

- 위조 요청을 전송하는 서비스에 희생자가 로그인 상태

- 희생자가 해커가 만든 피싱 사이트에 접속

 

일반)

- 조회성(HTTP GET Method) 데이터에는 방어 대상에 두지 않고, 쓰기/변경이 가능한 POST, PATCH, DELETE Mehotd에만 적용

- 정말 중요한 데이터를 조회하거나 GET을 통해 쓰기/변경 등의 동작을 한다면 GET Method에도 방어해야 할 수도 있음

 

방어 기법)

- Referer(현재 요청된 페이지의 이전 홈페이지 주소) 검증 :

  → 백앤드 단에서 request의 referrer를 확인하여 도메인이 일치하는지 검증하는 방법

- Security Token 사용 (Referrer 검증이 불가한 환경에 활용 : 

   사용자 세션에 임의의 난수 값을 저장하고 사용자의 요청마다 해당 값을 포함시켜 전송

       이후, 서버로 요청할 때마다 세션에 저장된 토큰 값과 요청 파라미터에 전달되는 토큰 값이 일치하는지 검증하는 방법

 

공통점 : 같은 도메인 내에 XSS 취약점이 있다면 CSRF 공격에 취약해짐


○ FILE DOWNLOAD VULNERABILITY

파일 다운로드 시, 임의의 문자나 주요 파일 입력을 통해 웹 서버의 홈 디렉터리를 벗어나 임의의 위치에 있는 파일을 열람하거나 다운 가능한 취약점

 

취약점)

- 웹 서버의 파일을 강제로 다운로드

- 다른 위치에 있는 파일도 다운로드 가능

- 부적절한 환경 설정에 의해 소스 코드 파일 또는 백업 파일 등이 다운로드 가능

- 텍스트 형태나 파일 다운로드 형태로 변환

 

발생 원인)

- 파일 다운로드 시 파일의 절대 경로 또는 상대 경로가 노출되는 경우

- 다운로드 모듈이 파일 경로나 이름을 파라미터로 사용하는 경우

- 파일 경로와 파일명 필터링이 이름하여 '../'를 이용해 상위 디렉터리 접근이 가능한 경우

- 구조가 단순하여 파라미터 변조를 통해 접근 허용 되지 않은 파일에 접근이 가능한 경우

 

절대 경로 : 웹 페이지나 파일이 가지고 있는 고유한 경로

  ex) C:\Apache24\bin\iconv\test.txt

 

상대 경로 : 현재 위치한 곳을 기준으로 한 그곳의 위치

   ex) http://192.168.0.0/board/data/../../qna/test.txt

 

취약한 소스코드 형태)

String filename=request.getParameter(“filename”);  → 파일명을 입력 값으로 받음

String Filepath=request.getParameter(“filePath”); → 파일 경로를 입력 값으로 받음

File file=new File(filePath+filename); → 필터링 없이 경로명+파일명을 조합하여 File객체 생성

 

진단 방법)

- 업로드 된 파일의 속성 정보를 확인하여 해당 파일의 속성 정보를 확인하여 해당 파일의 경로 노출 여부 확인

- 사용되는 파라미터 중 변조에 의해 다른 파일에 접근이 가능한 부분이 있는지 확인

- 파일명으로 다운로드하는 것을 확인 후 상위 경로로 이동하는 명령어 (../) 삽입

- 다운로드한 주요 파일을 바탕으로 시스템 정보 수집

 

대응 방안)

- 파일명과 경로명을 DB에서 관리

- 경로 관련 필터링 로직 구현

- 다운로드 시 권한 체크

- 파일 업로드, 다운로드 모두 조치가 이뤄져야 하고, DB 테이블 수정 필요


 SQL Injection

악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위

 

특징)

OWASP TOP 10 중 첫번 째에 속해 있음

공격이 비교적 쉬운 편이고 공격에 성공할 경우 큰 피해를 입힐 수 있음

 

공격 종류&방법)

- Error based SQL Injection

논리적인 에러를 이용한 SQL Injection

'or 1=1-- 구문 이용하여 where절을 모두 참으로 만들고, 주석처리 해줌

 (users 테이블에 있는 모든 정보를 조회하게 됨으로써 가장 먼저 만들어진 계정으로 로그인에 성공하게 됨)

→ 관리자 계정을 탈취한 악의적인 사용자는 관리자의 권한을 이용하여 또다른 2차 피해를 발생시킬 수 있게 함

 

- union based SQL Injection

*union : 2개의 쿼리문에 대한 결과를 통합하여 하나의 테이블로 보여주게 하는 키워드

정상적인 쿼리문에 union 키워드를 사용하여 인젝션에 성공하면, 원하는 쿼리문을 실행할 수 있게 됨

 

성공 조건) 

- union을 하려는 두 테이블의 컬럼 수가 같아야 함

- union을 하려는 두 테이블의 데이터형이 같아야 함

 

원인)

입력값에 대한 검증이 존재하지 않음

 

- Blind SQL Injection (Boolean based SQL)

데이터베이스로부터 특정한 값이나 데이터를 전달받지 않고, 단순히 참과 거짓의 정보만 알 수 있을 때 사용

로그인 폼에 SQL Injection이 가능하다고 가정했을 때, 서버가 응답하는 로그인 성공과 로그인 실패 메시지를 이용하여 DB의 테이블 정보 등을 추출 가능

 

- Blind SQL Injection (Time based SQL)

서버로부터 특정한 응답 대신에 참 혹은 거짓의 응답을 통해 데이터베이스의 정보를 유추하는 기법

사용되는 함수*My SQL 기준) : SLEEP, BENCHMARK

 

- Stored Procedure SQL Injection

*저장 프로시저(Stored Procedure) : 일련의 쿼리들을 모아 하나의 함수처럼 사용하기 위한 것

저장된 프로시저에서의 SQL Injection

대표적인 저장 프로시저 : MS-SQL에 있는 xp_cmd shell로 윈도우 명령어를 사용할 수 있게 됨

공격자가 시스템 권한을 획득해야 하므로 공격 난이도가 높으나 공격에 성공한다면, 서버에 직접적인 피해를 입힐 수 있음

 

- Mass SQL Injection

2008년에 처음 발견된 공격 기법

기존 SQL Injection과 달리 한번의 공격으로 다량의 데이터베이스가 조작되어 큰 피해를 입히는 것을 의미

MS-SQL을 사용하는 ASP 기반 웹 애플리케이션에서 많이 사용

쿼리문은 HEX 인코딩 방식으로 인코딩하여 공격

데이터베이스 값을 변조하여 데이터베이스에 악성스크립트를 삽입하고, 사용자들이 변조된 사이트에 접속 시 좀비PC로 감염되게 함

감연된 좀비PC들은 DDos 공격에 사용

 

대응방안)

사용자 입력값에 대한 검증 필요(서버 단에서 화이트리스트 기반으로 검증해야 함)

→ 블랙리스트 기반으로 검증하게 되면 수많은 차단리스트를 등록해야 하며, 하나라도 빠지면 공격에 성공하게 때문

prepared Statement 구문 사용

사용자 입력값이 데이터베이스의 파라미터로 들어가기 전에 DBMS가 미리 컴파일하여 실행하지 않고 대기

그 후, 사용자의 입력값을 문자열로 인식하게 하여 공격 쿼리가 들어간다고 하더라도, 사용자의 입력은 이미 의미 없는 단순 문자열이기 때문에 전체 쿼리문도 공격자의 의도대로 작동하지 않음

Error Message 노출 금지

웹 방화벽 사용

- 소프트웨어 형

서버 내에 직접 설치하는 방법

- 하드웨어 형

네트워크 상에서 서버 앞 단에 직접 하드웨어 장비로 구성

- 프록시 형

DNS 서버 주소를 웹 방화벽으로 바꾸고 서버로 가는 트래픽이 웹 방화벽을 먼저 거치도록 하는 방법


Cookie : 일반적으로 쿠키는 클라이언트의 정보 기록과 상태 정보를 표현하는 용도로 사용

- 정보기록

웹 서버는 각 클라이언트의 합업 옵션을 기억하기 위해 쿠키에 해당 정보를 기록하고, 쿠키를 통해 팝업 창 표시 여부 판단

- 상태 정보

수많은 클라이언트의 로그인 상태와 이용자를 구별해야하는 웹 서버는 클라이언트를 식별할 수 있는 값을 쿠키에 저장해 사용

 

Cookie가 있는 통신

- 클라이언트는 서버에 요청을 보낼 때마다 쿠키를 포함하고, 서버는 해당 쿠키를 통해 클라이언트 식별

- 만약, 서버가 별다른 검증 없이 쿠키를 통해 이용자의 인증 정보를 식별한다면, 공격자가 타 이용자를 사칭해 정보 탈취 가능

 

 

 

 

 

 

 

 

 

 

※ 관련 개념 문제는 방학활동 / write up을 참고해주세요 ※