sqler.com에 있는 배치파일이 제대로 작동 되면 그냥 썼으면 좋았으련만...
이것저것 다 적용하려고 하니 너무 방대해 지는 것 같아서 그냥 사용하려고 한다.
logparser가 기본적으로 깔려있어야 실행 된다.
안에 내용물은 배치파일 3개, sql문 1개인데
배치파일은 그냥 만들던거 집어넣은 거고, v3버젼을 사용하면 된다.
sql파일은 mssql 사용포트를 자동으로 가져오려고 하다보니 집어 넣게 됬다.
sa_attack_deny
@echo offREM @echo onREM @echo off 화면에 출력되지 않게 함CLSREM #########################REM blog.netchk.comREM #########################REM 자동으로 체크 하도록 변경.REM #############################################설정정보REM sql 사용 포트REM SET sql_port=1433REM logParser 경로. \를 붙여서 넣어야 함REM SET logParser="%ProgramFiles%\Log Parser 2.2\LogParser.exe"REM os 버젼 2003 이면 1, 2008이면 2REM SET os_version=2003REM #############################################:startREM ################################# 언어 확인 STARTset Key="HKEY_CURRENT_USER\Control Panel\International"for /F "tokens=3" %%a in ('reg query %Key% ^| find /i "sLang"') do set os_lang=%%aREM echo Language is %os_lang%REM KOR 이라고 나옴.IF /I %os_lang% == KOR (SET findName=이름SET query_type=클라이언트:) else (SET findName=NameSET query_type=client:)REM ################################# 언어 확인 ENDREM ################################# sql port 확인 STARTIF NOT EXIST PORT.sql ( echo port.sql 파일이 없습니다. ECHO mssql 포트 번호를 확인 할 수 없습니다. GOTO exit)for /f "tokens=3 delims=:" %%i in ('sqlcmd -S . -i PORT.sql') do set sql_port=%%iREM echo %sql_port%REM ################################# sql port 확인 ENDREM ################################# 32,64bit 확인하고 programFiles 위치 체크 STARTif "%ProgramFiles(x86)%XXX"=="XXX" (REM echo 32-bitset flatform=32set ProgRoot="%ProgramFiles%") else (set ProgRoot="%ProgramFiles(x86)%"set flatform=64)for /f "delims=" %%a in (%ProgRoot%) do set ProgRoot=%%~aREM echo %ProgRoot%set logParser="%ProgRoot%\Log Parser 2.2\LogParser.exe"REM ################################# 32,64bit 확인하고 programFiles 위치 체크 ENDREM ################################# log parser 확인 STARTECHO.echo log parser 가 설치되었는지 확인합니다.if not exist %logParser% ( echo logParser가 설치되어 있지 않거나 경로가 틀립니다. echo Log Parser 설정된 경로 : %logParser% echo http://www.microsoft.com/en-us/download/details.aspx?id=24659 pause goto exit) else ( echo 설치확인.)REM ################################# log parser 확인 ENDECHO.echo wevtutil 프로그램이 있는 지 확인합니다.if exist %SystemRoot%\system32\wevtutil.exe ( echo wevtutil 확인.) else ( echo 이벤트 로그를 삭제 하기 위해서는 wevtutil 이 필요합니다. echo 이벤트 로그를 삭제 하지 않고 진행합니다. timeout /t 2 /nobreak)echo system 확인 결과 입니다.echo OS Language : %os_lang%REM echo OS version : %os_version%echo OS platform : %flatform%echo mssql port : %sql_port%:start_ip_sececho ---------------------------에러 메시지 설명 ------------------------------echo 1. ... 필터 목록이 이미 있습니다.라는 메시지는 정상입니다.echo.echo 2. 파일 temp.txt을(를) 찾을 수 없습니다. 라는 메시지는echo 새로운 공격로그가 없을 경우 나타납니다.echo.echo 3. 이름이 '3'인 규칙이 정책 ...생략... 이미 있습니다. 메시지 역시 정상입니다.echo --------------------------------------------------------------------------------echo.timeout /t 5 /nobreakECHO.REM 차단 시작echo.echo 아이피 차단을를 진행합니다.echo.echo.REM 로컬룰지정netsh ipsec static set store location=localREM 최초 룰정책 생성netsh ipsec static add policy name=sql_sa_attack_ip_deny_list description="이벤트로그를 이용한 sa 공격시도 아이피 차단--blog.netchk.com NDH" assign=yesREM 필터리스트 추가netsh ipsec static add filterlist name=ip_denynetsh ipsec static add filterlist name=LocalREM 허용/거부룰 설정netsh ipsec static add filteraction name=Permit action=Permitnetsh ipsec static add filteraction name=Block action=Blockecho.echo.REM 이벤트로그 중 sql sa 계정 공격 아이피만 가져오는 쿼리. temp.txt로 생성REM %logParser% -i:evt -o:nat -q:on "SELECT DISTINCT TRIM(EXTRACT_TOKEN(EXTRACT_TOKEN(Strings,1,'%query_type%'),0,']')) AS ip INTO temp.txt FROM application WHERE EventID='18456' AND Strings LIKE '%%sa%%'"REM temp.txt 저장된 정보를 라인단위로 읽어 'ip_deny' 이름으로 작성된 netsh ipsec에 등록하기 위해 event_netsh ipsec_deny.bat 파일로 만든다 or 실행.REM /f 옵션 : 파일을 읽어드림REM bat 파일로 만듬REM for /f %%i in (temp.txt) do @echo netsh ipsec static add filter filterlist="ip_deny" srcaddr=%%i dstaddr=me description="SQL SA접속시도 자동차단 : %date% %time% 등록" protocol=tcp srcport=0 dstport=%sql_port%>>reg_netsh ipsec_deny.batREM 바로 실행for /f %%i in (temp.txt) do netsh ipsec static add filter filterlist="ip_deny" srcaddr=%%i dstaddr=me description="SQL SA접속시도 자동차단 : %date% %time% 등록" protocol=tcp srcport=0 dstport=%sql_port%REM temp.txt 삭제del /q temp.txtecho.echo.REM 로컬트래픽허용netsh ipsec static add filter filterlist=Local srcaddr=me dstaddr=localhost dstmask=255.255.255.0 protocol=ANY mirrored=yesREM 필터룰 추가netsh ipsec static add rule name=3 policy=sql_sa_attack_ip_deny_list filter=ip_deny filteraction=Blocknetsh ipsec static add rule name=1 policy=sql_sa_attack_ip_deny_list filter=Local filteraction=PermitREM 차단 끝:del_app_evtREM wevtutil 있어야 함.이벤트로그 삭제REM wevtutil cl application pausegoto exit:exitCLSecho 프로그램을 종료합니다.pause
ps.만든지 일주일 정도 지났는 데, 파워쉘로 더 간단하고 logparser 설치 할 필요도 없이 만들 수 있다는 걸 알게 됬다..;
오오 삽질러를 구원하셨습니다 감사합니다!!
답글삭제