JL-001 Jenkins Access and Controller Log
공격 행위 요약
SB-01에서 공격자는 Jenkins Web UI와 CLI 접근 가능성을 확인하고, 확보한 API Token으로 Jenkins CLI에 인증한다. 이후 Jenkins CLI 파일 읽기 취약점 악용 시도는 Jenkins access log와 controller log에서 HTTP 요청, CLI endpoint 접근, Java CLI client 흔적으로 확인한다.
로그 발생 위치
| 구분 | 위치 | 설명 |
| Jenkins access log | /var/lib/docker/volumes/jenkins_jenkins_home/_data/logs/access_log | Jenkins Web UI, CLI endpoint 접근 기록 |
| Jenkins Docker log | /var/lib/docker/containers/<container-id>/*-json.log | Jenkins controller 기동, plugin, 내부 오류 및 controller 이벤트 |
| Jenkins container | sb-jenkins | Jenkins controller가 Docker container로 실행됨 |
수집 방식
| 구분 | 방식 |
| Jenkins access log | Filebeat filestream sb01-jenkins-access-log로 수집 |
| Jenkins Docker log | Filebeat filestream + container parser sb01-jenkins-docker-log로 수집 |
| ELK 필드 | sb01_server: jenkins, sb01_log_type: jenkins_access 또는 jenkins_docker |
실제 관측 로그 예시
172.18.0.1 - - [21/May/2026:14:23:12 +0900] "GET /login HTTP/1.1" 200 1737 "-" "curl/8.5.0"
127.0.0.1 - - [11/May/2026:19:50:44 +0900] "POST /cli HTTP/1.1" 200 80 "-" "Java/17.0.9"
2026-05-21 04:57:27.694+0000 [id=24] INFO hudson.lifecycle.Lifecycle#onReady: Jenkins is fully up and running
주요 필드
| 필드 | 의미 | 예시 |
@timestamp | Filebeat가 해석한 이벤트 시간 | 2026-05-21T05:23:19.373Z |
sb01_log_type | SB-01 자체 로그 분류 | jenkins_access, jenkins_docker |
message | 원본 Jenkins 로그 라인 | POST /cli HTTP/1.1 |
log.file.path | 수집된 원본 파일 경로 | .../logs/access_log |
host.name | 로그 발생 서버 | ip-172-31-13-239 |
커버하는 Techniques Used
탐지 포인트
- 정상 배포 시간대가 아닌
POST /cli 요청이 있는지 확인한다.
- Jenkins CLI user-agent 또는 Java client 접근이 반복되는지 확인한다.
- Jenkins access log의 CLI 접근 직후
JL-002 build/workspace 탐색 흔적이 이어지는지 확인한다.
- Jenkins 접근 이후
LL-001에서 App SSH 접속이 발생하는지 pivot한다.
ELK Query 예시
sb01_server:jenkins AND sb01_log_type:jenkins_access
sb01_server:jenkins AND sb01_log_type:jenkins_access AND message:"POST /cli"
sb01_server:jenkins AND sb01_log_type:jenkins_docker AND message:"Jenkins is fully up and running"