1 (изменено: abasov, 2011-02-25 20:56:33)

Тема: BASH: Для пострадавших от ложного срабатывания clamav

Из-за недоделанных корпоративных антивирусов приходится делать выборочную проверку clamav. Последнее время clamav ошибается принимая вполне кашерные файлы за вирус, строго говоря многие системные библиотеки оказываются по его мнению заражены. Clamav "зараженные" файлы благополучно изымает с хоста, после чего винда естественно работать отказывается. Так вот пришлось сделать скрипт, который вертает на место:

#!/bin/sh
echo
echo "Это та директория, где лежат файлы, которые надо восстановить, и _clamav.log? (Да - y / Нет - n или Ctrl-C)"
read Y
if [ $Y = y  -o $Y = Y ];then if [ -f ./_clamav.log ];then

h1=`pwd | sed 's/\/home\/incoming\/infected\///' | awk -F"-" '{print $1}'`
echo -n "пострадавший хост ["$h1"]:"
read h;if [ "H${h}"=="H" ];then h=${h1};fi

# кто я есть?
s=`ps ax | egrep "^ *$PPID" | awk '{print $2}'`
u1=`w | grep "${s}" | awk '{print $3}' | awk -F"." '{print $1"ad"}'`
echo -n "от кого будем восстанавливать ["${u1}"]:"
read u;if [ "H${u}"=="H" ];then u=${u1};fi

# формируем короткий перечень восстанавливаемых файлов
cat _clamav.log | grep "moved to" | iconv -fcp1251 -tutf8 | dos2unix | \
sed 's/^C:/c:/'| sed 's/^D:/d:/'| sed 's/^E:/e:/'| sed 's/^F:/f:/'| sed 's/^G:/g:/'| sed 's/^H:/h:/'> _clamav.log.minutf

# полагаем, что перечень локальных дисков ограничен перечнем c,d,e,f,g,h и для каждого упомянутого
for d in c d e f g h;do
if `egrep -q "^${d}:" _clamav.log.minutf`;then 
# проверяем, что в текущей директории вообще нет примонтированных дисков, чтоб не смонтировать повторно
cat /proc/mounts | egrep -q "`pwd | awk '{print $1}'`" || \
# создаем директорию (если ее нет)
[ -d "${d}:" ] || mkdir "${d}:" 
# и монтируем в нее соответствующий диск пострадавшего хоста
[ -d "${d}:" ] && mount -t cifs -o user=${u},nobrl,directio -v //${h}/${d}'$' "${d}:";fi
# перемещаем файлы на прежние места
for i in *.infected*;do 
mv -v ${i} `grep ${i} _clamav.log.minutf | egrep "^${d}:" | awk -F': moved to ' '{print $1}'`
done
# отмонтировать диск и удалить директорию
umount "${d}:" && rmdir "${d}:"
done
else echo "Врешь...";fi;fi

vbs:

If UCase(Right(WScript.FullName, Len(WScript.FullName)-InStrRev(WScript.FullName,"\"))) <> "CSCRIPT.EXE" Then
        Title="recovery false positive  -  clamav..." 
            Text = "Запуск в консоли: " & vbNewLine & vbNewLine & " cscript.exe " & WScript.ScriptName & " IVANOVDU \\server\infected\_clamav.log" _ 
                     & vbNewLine & vbNewLine & _
                    "работать дальше в GUI?" 
            Res=MsgBox(Text,vbYesNo+vbQuestion+vbDefaultButton1,Title) 
If Res <> vbNo Then
    gui = true
        compname = InputBox("Имя ПК куда восстанавливаем: ")
        if compname = "" then WScript.Quit
        clamavlog = InputBox("Где _clamav.log", "clamavlog", "\\server\infected\_clamav.log")
        if clamavlog = "" then WScript.Quit
    else
    WScript.Quit
end if
End If

if WScript.Arguments.Count = 2 then
    compname = WScript.Arguments.Item(0)
    clamavlog = WScript.Arguments.Item(1)
end if
if gui = false then
if WScript.Arguments.Count < 2 then
    WScript.Echo "Хост не указан"
    WScript.Echo "_clamav.log не указан"
    WScript.Echo "Пример: cscript util.vbs IVANOVDU ""\\server\infected\_clamav.log"""
    WScript.Quit
End If
end if
Set objRegEx = New RegExp : Set objRegExp = New RegExp : Set objRegExp1 = New RegExp
objRegEx.IgnoreCase = True : objRegExp.IgnoreCase = True : objRegExp1.IgnoreCase = True
objRegEx.Global = True : objRegExp.Global = True : objRegExp1.Global = True
objRegExp1.Pattern = ": moved to .*" : objRegExp.Pattern = ".* moved to '|'" : objRegEx.Pattern = "moved to"
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(clamavlog, ForReading)
strLogFile = "_allreturnback_.cmd"
Set objFileCMD = objFSO.CreateTextFile(strLogFile)
Do Until objFile.AtEndOfStream
    strSearchString = objFile.ReadLine
    Set colMatches = objRegEx.Execute(strSearchString)  
    If colMatches.Count > 0 Then
        For Each strMatch in colMatches
            Res = ""+chr(34)+objRegExp.Replace(strSearchString, "")+chr(34)+""
            Res1 = replace(""+chr(34)+"\\"+compname+"\"+objRegExp1.Replace(strSearchString, "")+chr(34)+"",":\" , "$\")
            objFileCMD.WriteLine "copy /Y " & Res & " " & Res1
        Next
    End If
Loop
objFileCMD.Close
objFile.Close
wscript.echo "Создан файл исполнения: " & objFSO.GetAbsolutePathName(strLogFile)
Set objRegExp = Nothing
Set objRegExp1 = Nothing
Set objFSO = Nothing

перловый здесь и тут
и батник, вдруг кто-то захочет воспользоваться для сканирования.

@echo off
set pt=%COMPUTERNAME%-%date%-%time:~0,2%%time:~3,2%%time:~6,2%
cmd /Q /C mkdir "\\server\infected\%pt%" && \\server\infected\bin\clamscan.exe -d \\server\pub\antivir\clamav\base -l "\\server\infected\%pt%\_clamav.log" -r --move="\\server\infected\%pt%" -k -u --memory c: d: e: f:

2

Re: BASH: Для пострадавших от ложного срабатывания clamav

Странное мнение об антивирусе. Вроде бы как и "доделанный", но и ошибаться стал. Может быть перестать им пользоваться вообще? Я очень хотел им пользоваться, но так и не нашел в нем преимуществ.
Плохо глядел?

Нас невозможно сбить с пути, нам пофигу куда идти.

3

Re: BASH: Для пострадавших от ложного срабатывания clamav

DnsIs пишет:

Странное мнение об антивирусе. Вроде бы как и "доделанный", но и ошибаться стал. Может быть перестать им пользоваться вообще? Я очень хотел им пользоваться, но так и не нашел в нем преимуществ.
Плохо глядел?

Преимущества - деньги, открытый исходный код, более частое обновление сигнатур, за это приходится платить, в моем случае  false positive. Однако надо признать ложные срабатывание быстро устраняют, просто почаще обновляйтесь.

4

Re: BASH: Для пострадавших от ложного срабатывания clamav

Использую Avira AntiVir Personal, и хватает.
Для домашнего пользования бесплатный + мониторит память + эвристик - что мне кажется важнее чем, просто отлов по сигнатурам.

Нас невозможно сбить с пути, нам пофигу куда идти.

5

Re: BASH: Для пострадавших от ложного срабатывания clamav

DnsIs пишет:

Использую Avira AntiVir Personal, и хватает.

Для домашнего пользования бесплатный…

DnsIs, см. выше:

abasov пишет:

Из-за недоделанных корпоративных антивирусов…

6

Re: BASH: Для пострадавших от ложного срабатывания clamav

А я не считаю его недоделанным. Получше всяких NODов будет.

Нас невозможно сбить с пути, нам пофигу куда идти.