출처 : https://purehacking.com/portal/index.php?q=node/26
원제 : Virus Detection in ModSecurity
modsecurity & clamav를 이용한 업로드파일 검사를 이전에 포스팅 했었는데 이번엔 lua 스크립트를 이용한 방법을
소개합니다. 위에서 소개한 방법에서 perl 스크립트에서 lua 스크립트를 이용하고 apachesecurity.net에서 제공하는
blacklist를 이용, 바이러스를 업로드한 ip를 blacklist 처리하는 방식의 동작을 하게됩니다.
lua 스크립트를 이용하기 위한 modsecurity rule
- SecRule FILES_TMPNAMES "@inspectFile /opt/modsecurity/bin/modsec-clamscan.lua"
- "phase:2,t:none,log,deny"
적용전 확인해야 될 사항
1. clamscan이 아닌 clamdscan을 이용함 ( clamdscan을 이용하면 이미 떠 있는 clamd 데몬에 접근을 하게 되어 매번
바이러스 검사시에 생길 수 있는 필요없는 부하를 줄일 수 있습니다)
2. clamav유저를 apache (웹서버) 그룹에 포함 시킴
3. SecUploadFileMode direction을 0640으로 설정해 그룹이 접근 가능하게 함
4. blacklist를 이용해 해당 ip를 일정시간 차단함
lua 스크립트의 내용은 아래와 같습니다.
- --[[
- This script can be used to inspect uploaded files for viruses
- via ClamAV. To implement, use with the following ModSecurity rule:
- SecRule FILES_TMPNAMES "@inspectFile /opt/modsecurity/bin/modsec-clamscan.lua"
- "phase:2,t:none,log,deny"
- Author: Josh Amishav-Zlatin
- Requires the clamav-daemon and liblua5.1-rex-pcre0 Debian packages (or other
- OS equivalent)
- ]]--
- function main(filename)
- local rex = require "rex_pcre"
- local remote_addr = m.getvar("REMOTE_ADDR"); -- Retrieve remote IP address
- -- Configure paths
- local clamscan = "/usr/bin/clamdscan"
- local blacklist = "/opt/modsecurity/bin/blacklist"
- local duration = "3600"
- -- The system command we want to call
- local cmd = clamscan .. " --stdout --disable-summary"
- -- Run the command and get the output
- local f = io.popen(cmd .. " " .. filename)
- local l = f:read("*a")
- m.log(9, l)
- -- Check the output for the FOUND or ERROR strings which indicate
- -- an issue we want to block access on
- local isVuln = rex.match(l, "FOUND")
- local isError = rex.match(l, "ERROR")
- if isVuln ~= nil then
- local b = io.popen(blacklist .. " block " .. remote_addr .. " " .. duration)
- return "Virus Detected"
- elseif isError ~= nil then
- return "Error Detected"
- else
- return nil
- end
- end
lua 스크립트를 불러오는 rule은 적절히 수정해 사용하시면 되겠습니다. 당연한 얘기지만 좀더 정확한 이해와 적용을
위해서는 원문을 꼭 읽어보시기를 권합니다.
기존의 perl 스크립트를 이용한 modsecurity & clamav를 이용한 업로드파일 검사와 어떤 차이점이 있는지
시간나는대로 테스트 해보고 결과(?)를 알려드리겠습니다 :)
'Modsecurity' 카테고리의 다른 글
ModSecurity와 fail2ban을 이용한 ip 차단 (0) | 2009.08.14 |
---|---|
ModSecurity Core Rule Set - 중요 변경사항 (0) | 2009.08.07 |
ModSecurity를 이용한 HTTP DDoS/flood 공격 완화 (0) | 2009.06.16 |
modsecurity rules updater ( from gotroot.com ) (0) | 2009.06.01 |
ModSecurity를 이용한 특정 User-Agent 차단 rule (1) | 2009.05.04 |