워드프레스 ( WordPress ) Logging 설정 후 SQL Injection 공격 로그 확인 하 고 SELinux 적용 까지 · Handong 
 워드프레스 ( WordPress ) Logging 설정 후 SQL Injection 공격 로그 확인 하 고 SELinux 적용 까지 
 워드프레스 ( WordPress ) 는 기본 적 으로 에러 , 경고 , 알림 을 화면 에 표시 하 지 않 는다 ( 이 는 PHP 스크립트 의 기본 성질 이 기 도 함 ) . 그래서 치명 적 인 에러 가 발생 하 거나 , 서버 에 데이터 유출 문제 가 발생 하 는 등 전혀 알 수 없 다 . 그래서 워드프레스 코어 나 다른 플러그인 , 테마 와 의 충돌 을 미리 알 기 위해 디버그 모드 를 활성 화 할 수 있 다 . 
 디버그 기능 을 켜 면 아래 에서 다룰 SQL Injection 공격 을 탐지 할 수 있 다 . 
 워드프레스 설치 디렉 토리 에 가 서 wp - config . php 파일 을 아래 와 같이 원 하 는 기능 별로 수정 하 면 디버깅 을 사용 할 수 있 다 . 
 # 에러 발생 시 화면 에 표시 함 
 # 에러 발생 시 화면 에 표시 하 고 wp - content 디렉 토리 내 debug . log 파일 생 성 및 기록 
 # 에러 발생 시 화면 에 표시 하 지 않 고 debug . log 파일 만 생 성 및 기록 
 위 세 가지 기능 을 모두 적용 하 면 워드프레스 사이트 에서 에러 가 공개 적 으로 노출 되 지 않 고 , 에러 관련 사항 을 로그 파일 로 만 확인 할 수 있 게 된다 . 
 디버깅 설정 적용 
 이제 SQL Injection 공격 에 대해 살짝 알아보 자 . 이 공격 기법 은 다음 세 가지 로 정의 할 수 있 다 . 
 SQL Injection 공격 은 공격 대상 서버 의 DB 를 파괴 할 수 있 는 코드 삽입 기술 이 다 . 
 SQL Injection 공격 은 웹 해킹 기술 중 가장 많이 알려져 있 으며 보편 적 이 다 . 
 SQL Injection 공격 은 웹 페이지 내 입력 값 ( Input ) 에 SQL 문 으로 악의 적 인 코드 를 서버 로 넣 는 것 이 다 . 
 SQL Injection 공격 은 주로 사용 자 에게 입력 을 요구 ( 예 ) 로그인 ) 할 때 , 정상 적 인 입력 값 대신 에 SQL 문 을 넣 는 것 으로 발생 한다 . 결과 적 으로 , 서버 DB 에서 공격자 가 원 하 는 정보 를 유출 하 거나 변조 할 수 있 다 . 아래 예시 를 보 자 . 
 getRequestString 에서 사용자 로부터 입력 값 을 받 았 을 때 , txtUserId 변수 를 이용 해 SELECT 구문 을 생성 하 고 있 다 . 
 2017 년 9 월 , 아직 까지 SQL Injection 공격 은 웹 해킹 분야 에서 가장 많이 사용 되 고 있 으며 이 에 기본 적 인 방어 대책 을 구비 한 기업 들 이 많이 있 지 않 다 . 하지만 국내 정보 통신망 법 제 48 조 1 항 , 누구 든지 정당 한 접근권 한 없이 또는 허용 된 접근 권한 을 넘 어 정보 통신망 에 침입 해서 는 안 된다 . 라는 말 을 명심 하 자 . 사회 에서 함부로 해킹 하 면 형사 처벌 을 받 는다는 말 이 다 . 
 wp - content 디렉 토리 내 debug . log 파일 에 보 면 , PHP 경고 가 뜨 면서 DB 설정 과 맞 지 않 는다는 에러 가 뜬다 . 하지만 , 이 로그 를 보 고 관리자 입장 에서 SQL Injection 공격 인 것 을 확인 하 기 힘들 다 . 
 이번 에 는 해당 공격 로그 를 MySQL General Log 기능 을 켜 서 DB 에서 직접 보 고 , 워드프레스 플러그인 및 Apache 의 access _ log 파일 을 활용 하 자 . 
 MySQL 로그 디버깅 
 MySQL 로그 ( MySQL 구동 과 모니터링 , 쿼리 에러 로그 포함 ) 는 기본 적 으로 / var / log / mysqld . log 에 기록 되 지만 , SQL Injection 공격 을 정확 하 게 탐지 하 려면 General Log 기능 을 켜 서 봐야 한다 . General Log 는 MySQL 에 실행 되 는 전체 쿼리 에 대하 여 저장 가능 하 며 , MySQL 이 쿼리 요청 을 받 을 경우 바로 기록 한다 . 
 mysqld 서비스 를 재 시작 할 필요 없이 MySQL General Log 를 활성 화 할 수 있 다 . General Log 파일 경로 는 아래 와 같이 명령어 를 입력 할 때 보인다 . 
 # MySQL DB 로그인 
 # General Log 상태 확인 
 # General Log 활성 화 
 General Log 파일 경로 는 / var / lib / mysql / gachon . log 으로 되 어 있 지만 , / etc / my . cnf 파일 에서 따로 지정 할 수 있 다 . 그럴 때 는 파일 및 디렉 토리 권한 을 따로 설정 해야 한다 . 
 여기 서 사용 한 명령어 는 tail - f / var / lib / mysql / gachon . log , tail - f / var / log / mysqld . log , tail - f / var / www / html / wp - content / debug . log 다 . tail 명령어 는 주로 실시간 모니터링 할 때 많이 사용 한다 . 
 Plug - in 활용 디버깅 
 워드프레스 에 는 다양 한 테마 와 편의 성 을 고려 한 플러그 인 들 이 있 다 . 사용자 가 워드프레스 의 보안 성 을 높이 기 위해 몇 가지 플러그인 을 설치 할 수 있 으며 그 중 에 유명 한 것 들 이 Activity Log , Error Log Monitor , WP Security Audit Log 등 이 있 다 . 여기 서 는 Activity Log 플러그인 을 사용 하 겠 다 . 워드프레스 에 로그인한 후 , 아래 처럼 플러그인 을 검색 해서 설치 하 자 . 설치 하 고 나 면 , Activate 를 눌러서 활성 화 시킨다 . 
 그리고 , 워드프레스 에 SQL Injection 공격 을 몇 번 시도 하 면 아래 와 같이 Activity Log 가 출력 되 는 것 을 확인 할 수 있 다 . 
 Description 항목 에 보 면 SQL 문 까지 확인 할 수 있 어서 무척 편리 하 다 . 
 마지막 으로 , Apache 의 access _ log 파일 을 확인 하 여 공격 을 확인 할 수 있 는지 봤 지만 큰 성과 는 얻 을 수 없 었 다 . Apache 디렉 토리 인 / etc / httpd / logs / 에서 access _ log 와 error _ log 파일 을 확인 했 지만 , 서버 자체 HTTP 통신 에러 를 기록 하 고 있 었 으며 SQL Injection 공격 과 관련 된 에러 는 찾 을 수 없 었 다 . 
 이제 SELinux ( Security - enhanced Linux ) 에 대해 알아보 겠 다 . SELinux 는 NSA ( National Security Agency ) 가 개발 한 Linux 의 보안 을 강화 해 주 는 보안 강화 커널 이 며 , SQL Injection 공격 보다 더 치명 적 인 제로 - 데이 공격 및 버퍼 오버 플로우 등 애플리케이션 취약점 으로 인한 해킹 을 방지 해 주 는 핵심 구성 요소 이 다 . 
 기존 Linux 의 보안 문제점 중 하나 는 Root 가 슈퍼 유저 ( Super User ) 라는 것 이 다 . Root 권한 을 획득 하 면 해당 시스템 의 모든 정보 에 접근 이 가능 하 므로 Root 권한 으로 구동 되 는 데몬 ( Daemon ) 을 최소 화 해야 한다 . 또한 , Apache 서버 가 구동 시 에 자식 프로세스 의 소유자 를 httpd . conf 파일 에 지정 된 User , Group 으로 바꾸 는 것 도 이런 취약점 을 방지 하 기 위한 것 이 다 . 
 NSA 가 Linux 커널 2 . 6 부터 정식 커널 트리 에 기증 한 SELinux 는 바이너리 가 아닌 소스 이 므로 안심 하 고 사용 하 자 . 
 SELinux 는 아래 와 같 은 특징 을 가진다 . 
 SELinux 는 방화벽 , 백신 , 침입 탐지 시스템 ( IDS ) 가 아닌 Type Enforcement Framework 이 다 . 
 SELinux 기본 규칙 은 Deny ALL ( 모두 거부 ) 이 며 허용 하 는 규칙 에 대해 Allow 를 설정 해야 한다 . Linux 배포판 에 미리 정의 된 정책 이 탑재 되 어 있 다 . 
 제 로 - 데이 공격 으로 시스템 이 뚫렸 을 때 피해 최소화 가 가능 하 다 . 예 를 들 어 , 원격 으로 Apache httpd 를 해킹 해서 httpd 권한 을 얻 어도 , SELinux 는 httpd 가 80 , 443 , 8009 포트 만 접속 할 수 있 게 TE ( Type Enforcement ) 를 적용 하 여 공격자 가 동일 네트워크 내 다른 서버 로 침입 이 불 가능 하 게 만든 다 . 
 애플리케이션 에 대해 샌드박스 ( Sandbox ) 를 제공 하 므로 버퍼 오버 플로우 공격 피해 를 최소 화 할 수 있 다 . 
 만약 에 서버 나 홈페이지 를 공개 ( Public ) 서비스 로 전환 하 면 SELinux 는 옵션 이 아닌 필수 다 . SELinux 를 설정 하 는 방법 은 아래 와 같 다 . 
 # SELinux 모드 확인 
 # SELinux 파일 내 설정 을 확인 한다 . 
 # 시스템 재 시작 
 참고 로 , SELinux 를 설정 하 면 사설 인증서 ( Root CA ) 를 브라우저 에 등록 해서 사용 할 수 없 다 .