D. 정적 로그 분석기
개인식별정보와 같은 민감 정보를 로그에 평문 그대로 출력하는 것은 보안 취약점으로,
로그는 외부에서 접근하거나 법적으로 장기적으로 보관(5년)해야 하고 데이터에 따라 외부 분석 시스템으로 전달될 수도 있기 때문에 민감한 필드값이 로그로 유출되지 않도록 유의해야함
목표
빌드 시점이나 커밋 이전 시점에서 로그 코드를 정적으로 분석하여 로깅 금지 규칙 준수/위반 여부를 검증하는 엔진을 구현하기
설계 및 구현 가이드라인(참고)
- 로깅 금지 필드 목록(ex. 비밀번호, 토큰 등)을 팀 내에 별도의 정책으로 정의
정책은 추후 확장 가능하도록 다음과 같이 외부 설정 파일(logging-policy.yml)로 관리하며,
설정 파일에는 필드명, 접두/접미사 포함 여부 등 정적 분석을 위한 매칭 규칙 등을 지정함
프로그램은 해당 설정 파일을 읽어들여서 정적 분석에 활용함
logging-policy.yml
# logging-policy.yml
forbiddenFields:
- password
- passwd
- pwd
- token
- accessToken
- refreshToken
- secretKey
- privateKey
- authorization
...-
정적 분석기 구현
-
분석 대상은 로깅이 호출되는 지점으로, 로그 메시지를 분석하여 룰을 어겼는지 확인
Main.java
log.info(...)
log.debug(...)
log.warn(...)
log.error(...)
logger.info(...)- 출력된 보고서(report) 예시
report.txt
[LOGGING VIOLATION]
File: LoginService.java # 규칙을 어긴 파일명
Line: 42 # 규칙을 어긴 코드 라인
Rule: FORBIDDEN_FIELD_LOGGING # 필터링된 규칙 이름
Message: Variable 'password' is logged via log.info() # 규칙 메시지추후 Gradle/Maven 플러그인 형태로 연동하여 위반하였을 경우 빌드 실패(fail) 등의 처리 가능
Last updated on