공격설명
인증과 세션 관리와 연관된 어플리케이션 기능이 올바로 구현되지 않아 발생하는 취약점입니다. 그 결과, 공격자로 하여금 다른 사용자의 아이덴터티로 가장할 수 있도록 패스워드, 키, 세션 토큰 체계를 위태롭게하거나, 구현된 다른결함들을 악용할 수 있도록 허용하게 됩니다.
공격구문
GET /talk/bbs/story/129247?url=hxxp://www.socion.org/go.php?action=url&goto=ghostwriter-informatik.de&PHPSESSID=d4ef190c835666ae740374fa80d6e824 HTTP/1.1
Host:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1264.71
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
DNT: 1
Origin: hxxps://humor.fm
Connection: keep-alive
sec-ch-ua: "Not A(Brand";v="99", "Google Chrome";v="114", "Chromium";v="114"
sec-ch-ua-mobile: ?0
sec-gpc: 1
sec-ch-ua-platform: "Windows"
X-Forwarded-Proto: hxxp
X-Forwarded-For: 176.118.234.150
탐지근거
PHPSESSID=d4ef190c835666ae740374fa80d6e824
Solution
강력한 인증 및 세션 관리 통제의 단일 체계를 구축합니다.
----------------------------------------------------------------------------------------------------------------------------------------------
PHPSESSID=d4ef190c835666ae7403(randomsession)는 PHP에서 세션 관리를 위해 사용되는 세션 쿠키의 값을 나타냅니다.
PHPSESSID: PHP는 사용자의 세션을 추적하기 위해 PHPSESSID라는 이름의 세션 ID를 발급합니다. 이 세션 ID는 사용자가 웹사이트에 방문할 때 서버가 각 사용자를 구분하기 위해 사용하는 고유한 식별자입니다. 서버는 이 세션 ID를 기반으로 각 사용자별로 저장된 세션 데이터를 관리합니다.
d4ef190c835666ae7403(randomsession): 이 값은 사용자의 세션을 식별하는 고유한 문자열입니다. 이 값은 무작위로 생성되며, 사용자의 세션 동안 서버가 이 값을 통해 사용자를 추적합니다.
이러한 세션 ID는 일반적으로 서버와 사용자가 상태를 유지하기 위해 필요한 정보입니다. 하지만, 웹 취약점 탐지에서 PHPSESSID가 중요한 이유는 세션 하이재킹(Session Hijacking)과 같은 공격 기법과 관련이 있기 때문입니다.
취약점과 연관된 이유
만약 웹 애플리케이션에서 세션 ID를 안전하게 관리하지 않으면, 공격자가 세션 ID를 탈취하여 사용자 계정에 접근할 수 있습니다. 세션 하이재킹이 발생할 수 있는 주요 취약점으로는 다음이 있습니다:
세션 고정 공격 (Session Fixation Attack): 공격자가 미리 정해진 세션 ID를 사용자에게 강제로 할당함으로써, 그 세션을 탈취하는 방법입니다.
세션 탈취 (Session Hijacking): 공격자가 네트워크를 통해 사용자의 세션 ID를 가로채어 그 세션을 사용하게 되는 공격입니다.
세션 쿠키 보안 설정 미흡: HTTPOnly, Secure 플래그가 제대로 설정되지 않으면, 쿠키가 클라이언트 측에서 노출되어 공격에 취약해질 수 있습니다.
따라서 PHPSESSID=d4ef190c835666ae7403와 같은 세션 ID는 세션 관리의 중요한 요소이며, 안전하게 관리되지 않으면 웹 취약점의 원인이 될 수 있습니다.
세션하이재킹 공격 로그에 PHPSESSID=randomsession가 있으면 무조건 정탐인가?
세션 하이재킹(Session Hijacking) 공격 로그에 PHPSESSID가 있다고 해서 무조건 정탐(즉, 실제 공격)이라고 단정할 수는 없습니다. 세션 ID(예: PHPSESSID)가 로그에 남는 것은 일반적인 현상이기 때문에 이를 단독으로는 세션 하이재킹 여부를 판단하기 어렵습니다. 공격 가능성을 높이는 다른 정황 증거나 패턴이 있어야 실제 공격이라고 판단할 수 있습니다.
세션 ID가 로그에 남는 이유
정상적인 사용 사례: 사용자가 웹사이트에 방문하고 로그인을 시도하면, 서버는 세션을 생성하고 PHPSESSID라는 세션 쿠키를 발급합니다. 이는 정상적인 동작으로, 모든 사용자가 세션을 사용하게 됩니다. 따라서 로그에 세션 ID가 남는 것은 그 자체로 공격을 의미하지 않습니다.
자동화된 스캐닝 도구: 웹 애플리케이션의 취약점을 찾기 위해 자동화된 도구가 사용할 수도 있습니다. 이 경우에도 세션 ID가 로그에 남을 수 있지만, 이는 실제 공격과는 무관할 수 있습니다.
세션 하이재킹 정탐 여부를 판단하기 위한 추가 요소
세션 하이재킹이 실제로 발생했는지 판단하려면 다음과 같은 추가 증거들이 필요합니다:
동일한 세션 ID가 다른 IP에서 사용되는지 확인: 공격자가 세션 ID를 탈취했다면, 동일한 세션 ID가 서로 다른 IP 주소에서 사용될 수 있습니다. 이 경우는 정탐 가능성이 높아집니다.
세션 ID와 관련된 비정상적인 행동: 예를 들어, 특정 세션 ID로 의심스러운 로그인 시도, 권한 상승 요청, 또는 중요한 페이지에 비정상적인 접근이 있는지 확인해야 합니다.
비정상적인 세션 만료 시간: 세션이 비정상적으로 길게 유지되거나, 새 세션을 시작하지 않고 오래된 세션 ID로 지속적인 요청이 이루어지면 하이재킹 공격일 수 있습니다.
사용자 활동과의 불일치: 로그에서 사용자의 실제 활동과 서버에서의 요청 내역이 불일치하는 경우, 예를 들어 사용자가 이미 로그아웃했는데 세션이 유지되는 등의 문제가 있을 때 정탐 가능성이 높습니다.
정리
PHPSESSID가 로그에 있다고 해서 무조건 세션 하이재킹이 발생했다고 볼 수는 없습니다. 추가적인 정황 증거와 이상 패턴을 종합적으로 분석하여 실제 공격 여부를 판단해야 합니다. 정탐 여부를 결정하려면 세션의 비정상적 사용 패턴, 동일 세션의 다른 IP 사용 여부, 비정상적인 활동 등을 고려해야 합니다.
GET 요청의 값에 PHPSESSID=randomsession가 있으면 취약한가?
GET 요청의 값으로 **PHPSESSID**가 전달되는 경우는 보안 취약점을 유발할 가능성이 매우 높습니다. 일반적으로 세션 ID는 **쿠키(cookie)**에 저장되어 서버와 클라이언트 간에 자동으로 전송되는 것이 원칙입니다. 그러나 세션 ID가 URL 파라미터(GET 방식)를 통해 전송되면 여러 보안 문제가 발생할 수 있습니다.
세션 ID가 GET 방식으로 전송될 때의 문제점
세션 하이재킹 위험:
세션 ID가 GET 방식으로 URL에 포함되면, URL이 로그에 기록되거나 브라우저의 히스토리에 남게 됩니다. 이는 사용자가 사용하는 네트워크나 서버, 또는 브라우저 히스토리에서 세션 ID가 노출될 수 있음을 의미합니다.
URL에 포함된 세션 ID는 다른 사람이 쉽게 획득할 수 있습니다. 이를 통해 세션 하이재킹(Session Hijacking)이 발생할 수 있습니다. 예를 들어, 사용자가 클릭한 링크가 다른 사람에게 전송되거나 공유되는 경우 세션 ID가 노출될 위험이 있습니다.
중간자 공격(Man-in-the-Middle Attack):
특히 HTTPS가 아닌 HTTP 프로토콜을 사용하는 경우, 네트워크에서 트래픽을 가로챌 수 있는 중간자 공격에 노출될 가능성이 큽니다. 공격자는 URL을 감청하여 세션 ID를 쉽게 탈취할 수 있습니다.
검색 엔진 인덱싱:
URL에 포함된 세션 ID는 검색 엔진에 의해 인덱싱될 가능성이 있습니다. 그 결과, 검색 엔진에 노출된 세션 ID를 통해 다른 사람이 해당 세션에 접근할 수 있습니다. 이를 통해 공격자가 세션을 탈취하고 사용자로서 행동할 수 있습니다.
참조(referrer) 헤더에 세션 ID 노출:
사용자가 외부 사이트로 이동할 때, 브라우저는 참조(referrer) 헤더에 이전 페이지의 URL을 포함합니다. 만약 세션 ID가 URL에 포함되어 있다면, 외부 사이트에 세션 ID가 노출될 위험이 있습니다.
해결 방법
세션 ID는 쿠키에 저장:
세션 ID는 쿠키(cookie)를 통해 전달해야 하며, URL에 직접 포함되지 않도록 해야 합니다. 이를 통해 세션 ID가 URL을 통해 노출되는 위험을 방지할 수 있습니다.
HTTPOnly, Secure 속성 설정:
쿠키에 저장된 세션 ID는 HTTPOnly 속성을 설정하여 자바스크립트를 통한 접근을 차단하고, Secure 속성을 설정하여 HTTPS 연결에서만 전송되도록 해야 합니다.
HTTPS 사용:
세션 ID가 네트워크를 통해 안전하게 전송되도록, 반드시 HTTPS 프로토콜을 사용하여 통신을 암호화해야 합니다. 이는 중간자 공격으로부터 보호하는 중요한 방법입니다.
결론
세션 ID가 GET 방식으로 전달되는 것은 보안 취약점으로 간주될 수 있습니다. 세션 ID는 쿠키에 저장하고, GET이나 URL 파라미터로 전달되지 않도록 설정하는 것이 안전합니다. 세션 관리에서 이러한 취약점을 제거함으로써 세션 하이재킹 등의 공격을 방지할 수 있습니다.
'보안관제 이벤트 분석' 카테고리의 다른 글
[보안관제] SQL 인젝션 탐지(Webshelll에 사용되는 객체 탐지) (0) | 2024.09.26 |
---|---|
[보안관제] 웹 어플리케이션 취약점 공격 탐지(Webshelll에 사용되는 객체 탐지) (0) | 2024.09.25 |
[보안관제] 디렉토리 접근 시도 탐지(Directory Access) (0) | 2024.09.12 |
[보안관제] PHPUnit PHP Remote Code Execution (0) | 2024.09.12 |
[보안관제] SQL Injetion DB 데이터 추출 공격 탐지 (0) | 2024.09.12 |