Infosec403

owasp_2021_A09.txt

4.45 KB · text/plain · 업로드 2026-07-08 18:07

https://owasp.org/Top10/2021/A09_2021-Security_Logging_and_Monitoring_Failures/


OWASP 2021 : A09
 -> Security Logging and Monitoring Failures
 -> 보안 로깅 및 모니터링 실패
 --> 시스템에 문제나 공격이 발생했을 때, 이를 탐지/대응하려면 로깅/모니터링이 필수적
 ---> 이 부분이 부족할 때 발생하는 보안 허점들의 종합
 ----> 'Moritoring' Failures: 로깅은 잘 해도 관제를 허술하게 하는 경우가 다수이다.


CWE-117 : Improper Output Neutralization for Logs
 -> 로그에 대한 부적절한 출력 중화
 --> Log Forgery: 공격자가 입력창에 문자를 삽입해, 로그를 조작할 수 있다(정상적인 이벤트인 것처럼 위조)
 --> XXS/Injection: 웹 기반의 로그 모니터링 툴 사용 시, 로그에 심어진 악성 스크립트가 실행될 수 있음
 ---> 로그 기록 시 특수문자 처리 신경쓰기(이스케이핑)
 * 예시: logger.info("Login failed for user: " + username)
        --> 공격자가 username에 \n INFO - Login succeeded for user: admin
        ---> 개행 문자때문에, 한 행에 하나의 이벤트가 기록되어야 하는 로그가 두 줄이 되어버림
        ----> 원래는 admin이 로그인하지 않았는데, admin이 로그인한 것처럼 로그가 남아버림.
        -----> XSS나 Injection 공격과 연계될 경우 대재앙(cacti 같은 웹 브라우저 기반 관제 시스템으로 해당 로그 열람할 경우)


CWE-223 : Omission of Security-relevant Information
 -> 보안 관련 정보 생략
 --> 보안 사고가 터졌을 때, 추적해야 할 정보가 로깅되지 않은 경우
 --> '누가', '언제', '어떤 IP에서', '무엇을 했는지' 알 수 없는 경우
 ---> 보안에 민감한 이벤트(로그인 실패/권한 변경/데이터 대량 조회/주요 설정 변경) 발생 시,
      시간/사용자 식별자/IP주소/수행된 작업 등을 반드시 세트로 기록해야 한다
 * 예시: 특정 쇼핑몰 웹사이트에서, 관리자 권한을 가진 직원이 고객들의 개인정보 대량조회+유출함
        --> 로그는 데이터 백업 성공 로그만 남음
        ---> 누가, 어디서 접근했는지 로그가 없어 범인 못잡음


CWE-532 : Insertion of Sensitive Information into Log File
 -> 로그 파일 내 민감한 정보 삽입
 --> 개발/디버깅 단계의 편의성을 위해(또는 로그 정책 설정 시 실수로), 
     로그에 비밀번호나 개인정보 등을 찍어버리는 경우
 --> 공격자가 로그에 접근 가능해졌을 시 2차피해가 너무 커진다
 ---> 로그 저장/출력 시 비밀번호는 마스킹 처리를 하거나 로그에 포함되지 않게 필터링해야 함
 * 예시: 신용카드 결제 모듈을 개발하며, 
        디버그 단계에서 요청 데이터 전체(카드 비밀번호 포함)를 로그로서 출력하게 남겨놓음
        --> 운영 서버에 배포할 때, 디버그 시 필요했던 기능을 비활성화하지 않음
        ---> 로그 파일에는 수천 명의 카드 비밀번호가 포함되어 있었다
        ----> 해커가 로그 파일을 탈취했고, 수천 명의 카드 정보가 노출됨


CWE-778 : Insufficient Logging
 -> 불충분한 로깅
 --> 시스템에서 발생하는 이벤트에 비해 로깅 자체를 너무 적게 하거나 안 하는 경우(부실함)
 --> 공격자가 공격 시도해도 로그에서 추적 불가능
 ---> 로그는 충분히 잘 남기자..
 * 예시: 해커가 자동화 툴을 이용해서, 브루트 포스 공격을 하고있음(비밀번호 크래킹)
        --> 서버는 해커가 50만번의 로그인 시도를 할 동안, 아무런 로그도 남기지 않음


결과적으로, 로깅 시스템을 구축할 때, 한번 더 생각해보자
 -> 개행 문자 같은 입력값이 들어왔을 때, 예외 처리를 잘 해주나?
    (로그 파일에 이상한 값이 들어가지 않게 통제되는가?)
 -> 보안 관련 정보가 충분하게(사고 후에 추적이 가능하게) 로그에 남는가? 
    시스템 운영 관련 정보만 로그에 남지 않는가?
 -> 로그 파일에 필요없는, 민감한 정보가 쓸데없이 들어가지는 않는가?
 -> 로그를 너무 부실하게 남기지는 않는가?(현재 시스템에 일어나고 있는 일이 로그에 잘 남는가?)

 + 그리고, 로깅 시스템이 잘 구축되었다고 하더라고, 관제에 부실하지 말자..