○ 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을 참고해주세요 ※
'5. 방학 활동 > 개념 정리' 카테고리의 다른 글
[2023.02.11] 워게임&CTF 스터디 1팀 리버싱 개념정리] (0) | 2023.02.19 |
---|---|
[2021.07.26] 포너블팀 나동빈-시스템해킹 강의 정리 (0) | 2021.07.26 |