이번 시간에는 CSRF와 File Inclusion에 대해서 간단히 알아보고 DVWA를 통한 모의 해킹 실습을 진행하도록 하겠습니다.
발표에 사용한 PPT 파일을 첨부합니다. 과제 수행 당시 오류가 발생하여 File Inclusion 부분은 38주차 과제물에 보강되어 있어 해당 PPT파일도 같이 첨부하겠습니다. 이 과제는 AI 스쿨의 리팩토링과정을 수행한 것 입니다. 해당 커리큘럼에 대한 더 자세한 내용을 원하신다면 카페를 통해 알아봐주시기 바랍니다.
https://cafe.naver.com/itscholar
본문
CSRF
CSRF란 Cross Site Request Forgery의 약자로, 사이트간 요청 위조 공격을 뜻합니다. 이는 사용자가 모르는 사이에 사용자의 권한을 이용하여 악의적인 요청을 실행하는 방식으로 이루어집니다. 주로 피싱 메일, 피싱 사이트, 피싱 게시글 등을 클릭한다면 스크립트가 자동으로 실행되어 사용자의 권한으로 다른 웹사이트에 자동 결제 요청, 비밀번호 강제 변경 등의 요청을 수행하게 만듭니다.
DVWA에서 해당 공격 기법을 실현해보도록 하겠습니다. 칼리 리눅스에서 버프스위트를 켜고 버프스위트 브라우저를 이용하여 DVWA 웹에 접근합니다.
DVWA에서 CSRF 탭에 접근한다면 위 이미지와 같은 페이지를 확인할 수 있습니다. 해당 페이지는 비밀번호를 변경하는 페이지입니다. 우선 비밀번호를 1234로 바꾸도록 합니다.
그 후 버프스위트에서 방금 전송한 비밀번호 변경 패킷을 확인합니다. 가장 위에 GET 명령어를 통해 비밀번호를 1234로 변환하는 명령이 보내지는 것을 확인할 수 있습니다.
이 명령을 기반으로 스크립트를 만들어 피해자의 의사와는 관계 없이 비밀번호를 변경하도록 할 수 있습니다.
이를 시연하기 위하여 XSS (Stored) 탭을 일종의 방명록처럼 활용하는 예사를 보여드리겠습니다. 위의 내용처럼 입력하게 된다면 보는 순간 스크립트를 작동시키는 이미지 파일이 생성되어 게시글에 포함 됩니다.
이제 다시 비밀번호를 password를 바꿉니다.
다시 XSS(Stored) 탭을 방문하면 아까 입력한 게시글을 확인할 수 있습니다. 이미지 파일의 경우 다른 이미지 파일을 지정하지 않았기에 엑스박스가 나타난 것을 볼 수 있습니다. 하지만 스크립트는 정상적으로 작동하는 것으로 보입니다.
비밀번호로 1234를 입력하였더니 로그인에 성공하는 모습입니다. CSRF 공격을 통하여 비밀번호를 변경하는 데 성공했습니다.
해결법
CSRF 공격을 막기 위해서는 다음과 같은 점을 고려해야 합니다.
- Samesite쿠키 설정
- 외부 사이트에서 일어난 요청을 거부해야합니다.
- 요청 메소드 검증
- 비밀번호 변경, 온라인 결제 등의 중요한 요청에는 Get 메소드를 사용하지 말고 POST, PUT, DELECT등 상대적으로 안전한 메소드를 사용해야 합니다.
- CSRF 토큰 사용
- CSRF 토큰을 발급하여 사용자의 요청을 검증합니다. 이를 이용한다면 외부 요청이 있을 때, 토큰 값을 검증하는 것으로 유효한 요청인지 확인할 수 있습니다.
- Referer 검증
- 웹 서버에서 Referer를 검증하여 요청을 한 도메인이 다른 사이트라면 차단합니다.
File Inclusion
파일 인클루전이란 주로 PHP에서 발생하는 취약점으로 공격자가 include 기능을 사용하여 원하는 코드를 소스코드 내부에 삽입할 수 있는 취약점을 말합니다. 공격자는 이를 통하여 웹 서버 내부의 민감한 정보를 확인하거나, 웹서버에 외부 악성코드를 삽입하여 서버를 공격할 수 있습니다.
파일 인클루전 공격은 크게 두가지 방식이 있는데, RFI방식과 LFI 방식이 그것입니다.
RFI (Remote File Inclusion)
RFI는 공격자가 include 기능을 통하여 서버 외부에 있는 파일을 소스코드 내부에 삽입할 수 있는 취약점을 말합니다. RFI 취약점이 존재할 경우 다음과 같은 피해를 우려할 수 있습니다.
- 악성코드 삽입, 실행
- 정보 노출
- 공격자의 시스템 권한 장악
RFI 방식의 공격을 시연하겠습니다. RFI 방식의 공격은 외부 파일을 서버 내부에 포함시켜 작동하게 하는 방식입니다. 먼저 서버 내부에서 중요하다고 여겨지는 etc/passwd 파일을 추출할 목표로 삼겠습니다. 그리고 스크립트 파일을 작성하여 작동한다면 etc/passwd 파일을 유출하도록 설정하겠습니다.
가장먼저 스크립트 파일을 먼저 작성하겠습니다.
터미널을 열고 위의 이미지처럼 명령어를 작성합니다. cd /var/www/html은 인클루드할 파일을 만들 위치이며 이는 편의성을 위해서 해당 경로에 제작하기로 결정하였습니다. 그리고 vi test.php를 입력하여 test.php 파일을 생성, 작성합니다.
이제 해당 스크립트가 작동할 경우 해당 파일은 /etc/passwd 파일 내부에 있는 정보를 유출할 것 입니다. :wp를 입력하여 저장하고 종료합니다.
DVWA에서 파일 인클루전을 연습할 수 있도록 만들어진 File Inclusion 탭에 접근합니다. 그리고 File1.php를 클릭합니다.
해당 파일은 현재 접속자의 IP를 확인하는 기능이 있었습니다. 이제 주소창에서 파일 이름을 수정하여 이번에 작성한 스크립트 파일을 인클루드하여 작동시킬것입니다. file1.php 위치에 http://localhost/test.php를 입력합니다.
해당 php 파일로 인하여 /etc/passwd 파일의 내용이 유출된 모습입니다.
LFI (Local File Inclusion)
LDI는 공격자가 include 기능을 이용하여 서버 내부에 있는 파일을 소스코드상에 삽입할 수 있는 취약점을 말합니다. LFI 취약점이 존재할 경우 다음과 같은 피해가 일어날 수 있습니다.
- 웹 서버 내부에 있는 파일 읽기, 쓰기, 다운로드, 실행
- 루트 디렉토리로 이동, 웹 서버 내부 모든 파일에 접근 가능
- 비밀번호, 계좌정보 등 민감한 정보 유출
LFI 방식의 공격은 RFI 방식에 비해 조금 더 간단합니다. 먼저 File Inclusion 탭에 접근하여 file1.php를 클릭합니다.
해당 페이지에서 주소에 있는 file1.php를 /etc/passwd로 변경합니다.
/etc/passwd 파일이 유출된 모습입니다.
해결법
파일 인클루전 공격을 막기 위해서는 다음과 같은 해결책을 고려할 수 있습니다.
- 외부 사용자의 include 기능 사용 금지
- include 기능의 사용이 불가피하다면, include의 대상 검증
- 블랙리스트 검증
- https:// 혹은 ../ 등의 악용될 수 있는 문자열 차단
- 화이트리스트 검증
- include 기능이 필요한 파일 리스트 작성, 나머지 파일은 include 할 수 없음.
- 블랙리스트 검증
'AI 스쿨 리팩토링 보안직무 과정' 카테고리의 다른 글
39주차 과제 - SQL Injection (LOW) (0) | 2024.03.24 |
---|---|
38주차 과제 - File Upload, Insecure CAPTCHA (Low) (2) | 2023.11.30 |
36주차 과제 (하) - Brute Force 공격, Command Injection 공격 (LOW) (1) | 2023.11.21 |
36주차 과제 (상) - DVWA, KALI LINUX 설치 (1) | 2023.11.07 |
35주차 과제 - 프록시 서버 (0) | 2023.10.31 |
댓글