2. 클라우스 서비스(AWS, CF 등)를 이용하는 경우 웹 서버 X-Forworded-For 설정을 하여야 리얼IP가 기록 됨.
3. 공격으로 의심되는 로그가 확인 될 경우 해당 로그가 발생된 출발지IP 정보를 기준으로 로그를 재검색 한다.
특정(지정된) 문자가 포함된 파일 추출
1. 프로그램 실행화면 [그림1] astrogrep 실행 화면 2. 프로그램 다운로드 https://astrogrep.sourceforge.net/download/
웹쉘 업로드 공격의 경우 접속로그를 시간순으로 확인하여 파일 업로드 발생된 취약점 포인트를 확인하여야 함.
POST Method 웹쉘의 경우 전송된 명령어 기록이 남지 않음
업로드된 웹쉘을 탐지한 경우 해당 웹쉘내 포함된 문자열 패턴 등을 기준으로 동일 파일이 다른 디렉토리에 복사된것이 없는지 확인하여야 함.
웹쉘이 업로드 될 경우 2차 공격을 위해 다른 디렉토리내 다른 웹쉘을 추가로 숨겨두는 경우가 있으므로, 침해가 발행된 날짜를 기준으로 해당일자 이후에 생성된 파일을 모두 전수 조사하여야 함.
Everything, 윈도우 탐색기 기능을 통해 "생성/수정일자"기준으로 검색 후 분석하여야 함.
PHP 환경의 경우 .htaccess 파일 변조를 통해 특정 확장자를 cgi로 실행가능하도록 설정 함.
정상적인 웹페이지내 악성 코드를 추가로 삽입하여 위장된 파일을 찾아내기에 용이 함.
해킹 완료 후 도박 및 광고용 웹페이지를 업로드하여 광고페이지로 활용하는 경우거 있음
로그에 기록된 웹쉘 메서드 및 파라미터를 통해 침해 영향도를 분석 할 수 있음.
웹쉘 파일은 세션연결(유지)가 아닌 Stateless 방식이므로 웹 프라우저를 통해 웹쉘을 삭제 할수 있음(선제 대응)
웹 서버가 2대 이상일 경우 하나의 서버에만 업로드 되어있을수 있음
응답코드(200, 404, 500 등)를 확인하여 공격 호출의 유효성을 판단 한다.
리퍼러 정보를 이용하여 접근전 웹사이트 정보를 수집한다.
SQL인젝션 공격 로그분석 및 대응
□ 로그분석 포인트
1. 웹 로그 내 출발지 Real IP가 기록되는지 확인하자
2. 클라우스 서비스(AWS Front, CloudFlare, Akamai 등)를 Proxy 형태로 구성된 경우 기본적으로 웹서버 내 출발지 IP 정보가
클라우드 서비스 IP기록되므로 침해사고 발생시 실제 공격지 IP추적이 불가능 하다.
3. 위와 같은 서비스 구성의 경우 웹 서버 환경설정을 변경하여 Proxy 서버를 접속한 IP를 추가적으로 표기하는
X-Forworded-For (XFF)설정을 적용하여야 한다
※ X-Forwarded-For 헤더 : 클라이언트와 서버 간의 HTTP 통신에서 사용되는 표준 헤더 중 하나입니다.
이 헤더는 클라이언트가 서버에 요청을 보낼 때 클라이언트의 실제 IP 주소를 서버에 전달하는 데 사용됩니다. 일반적으로
이 헤더는 웹 서버나 리버스 프록시 서버에서 클라이언트의 IP 주소를 식별하는 데 사용된다.
IIS(인터넷 정보 서비스) 웹 서버 설정 기준
1. 로그파일 형식 #Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status X-Forwarded-For
2. 웹 로그 기록 예) 2024-04-28 12:00:00 203.0.113.5 GET /example-page - 80 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/80.0.3987.163+Safari/537.36 200 0 0 203.0.113.5, 198.51.100.1
3. 로그파일 필드 설명 - date: 요청이 발생한 날짜 (yyyy-MM-dd 형식) - time: 요청이 발생한 시간 (HH:mm:ss 형식) - s-ip: 서버의 IP 주소 - cs-method: 클라이언트 요청의 HTTP 메서드 (예: GET, POST) - cs-uri-stem: 요청된 리소스의 경로 부분 (URL에서 호스트 이름 및 쿼리 문자열을 제외한 부분) - cs-uri-query: 요청된 리소스의 쿼리 문자열 부분 s-port: 서버의 포트 번호 - cs-username: 클라이언트의 인증된 사용자 이름 (일반적으로 익명으로 설정되어 있음) - c-ip: 클라이언트의 IP 주소 cs(User-Agent): 클라이언트의 - User-Agent 헤더 값 (클라이언트의 브라우저 및 버전 정보 등) - sc-status: 서버의 HTTP 응답 상태 코드 - sc-substatus: 상태 코드의 추가 정보 - sc-win32-status: Windows의 HTTP 상태 코드 - time-taken: 요청이 처리되는 데 걸린 시간(밀리초 단위)
공격으로 의심되는 로그가 확인 될 경우 해당 로그가 발생된 출발지IP 정보를 기준으로 로그를 재검색하여 공격의 전체적은 흐름을 파악해야 한다.
단, 공격자 IP가 다수일수 있으므로 전체 로그를 꼼꼼히 점검하여야 한다.
리퍼러(Referrer) 정보를 확인하여 공격자가 어떤 사이트를 통해 접속했는지를 파악할 수 있다 2024-04-28 12:00:00 203.0.113.5 GET /example-page - 80 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/80.0.3987.163+Safari/537.36 https://www.example.com/landing-page 200 0 0
웹쉘 업로드 공격의 경우 접속 로그를 시간순으로 정렬하여 파일 업로드 발생된 취약점 포인트를 파악하여야 한다.
POST Method 웹쉘의 경우 데이터가 전송되므로 웹쉘을 통해 전송된 명령어를 확인 할 수 없다. 203.0.113.5 - - [28/Apr/2024:12:00:00 +0000] "POST /webshell.php HTTP/1.1" 200 556 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
웹 서버 Default 로그설정은 HTTP POST Method 데이터는 기록되지 않지만 남기도록 설정은 가능하다
SQL인젝션 공격을 통해 실제 웹 로그에 기록된 실제 쿼리된 테이블, 컬럼 등 조건문을 분석하면 유출 범위를 파악할수 있다 203.0.113.5 - - [28/Apr/2024:12:00:00 +0000] "GET /product?id=1 UNION SELECT 1,username,password FROM users WHERE id=1-- HTTP/1.1" 200 556 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
실제 사용된 공격 쿼리 실제 DB의 레코드 번호와 비교하여 유출 범위를 정확히 파악해야 한다.
웹 Access Log에는 호출된 쿼리만 기록되어있으나, 에러로그에는 사용자 브라우저로 리턴된 결과값 일부를 확인 할 수 있으니 필수적으로 확인하여야 한다.