내가 뭘 하려는 거지?:
파일 서버에서 맬웨어를 검색하려고 하는데 매뉴얼 페이지에 최대 4GB의 파일을 검색할 수 있다고 나와 있는 clamav/clamscan을 사용하고 있습니다.
이것매뉴얼 페이지에는 다음과 같이 명시되어 있습니다.
--max-filesize=#n
각 아카이브에서 최대 #nKB를 추출하고 스캔합니다. xM 또는 xm 형식으로 값을 메가바이트 단위로 전달할 수 있습니다. 여기서 x는 숫자입니다. 이 옵션은 DoS 공격으로부터 시스템을 보호합니다(기본값: 25MB, 최대값: <4GB)
--max-scansize=#n
스캔한 각 파일에서 최대 #nKB까지 추출하고 스캔합니다. xM 또는 xm 형식으로 값을 메가바이트 단위로 전달할 수 있습니다. 여기서 x는 숫자입니다. 이 옵션은 DoS 공격으로부터 시스템을 보호합니다(기본값: 100MB, 최대값: <4GB)
내 시스템은:
새로운 하드웨어 ASRock 마더보드,
CPU: AMD Athlon(tm) II X2 270 프로세서(3400MHz)
메모리: 4GB
운영 체제: Debian Wheezy 모든 업데이트.
질문:
내가 여기서 뭘 잘못하고 있는 걸까?
다음 오류 및 경고는 무엇을 의미합니까?
이 문제에 대한 해결 방법이 있습니까?
내 상황:
clamscan
일주일 넘게 2개의 3TB 드라이브를 스캔하려고 했지만 항상 동일한 오류가 발생합니다(바이트코드 번호가 다른 경우 제외).
LibClamAV Warning: [Bytecode JIT]: recovered from error
LibClamAV Warning: [Bytecode JIT]: JITed code intercepted runtime error!
LibClamAV Warning: Bytcode 38 failed to run: Time limit reached
LibClamAV Warning: [Bytecode JIT]: Bytecode run timed out, timeout flag set
LibClamAV Warning: [Bytecode JIT]: recovered from error
LibClamAV Warning: [Bytecode JIT]: JITed code intercepted runtime error!
LibClamAV Warning: Bytcode 38 failed to run: Time limit reached
LibClamAV Warning: [Bytecode JIT]: recovered from error
LibClamAV Warning: [Bytecode JIT]: Bytecode run timed out, timeout flag set
LibClamAV Warning: [Bytecode JIT]: JITed code intercepted runtime error!
LibClamAV Warning: Bytcode 38 failed to run: Time limit reached
스캔 후 약 40~50시간:
(다음 스니펫은 clamscan
내가 실행하려는 실제 명령이라는 점에 유의하세요)
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
2012 root 20 0 1903M 246M 1244 R 101. 6.6 47h27:45 clamscan -r -i --remove --max-filesize=4000M --max-scansize=4000M /DATA1/
bytecode.cvd
일부 파일이 손상 되었다고 의심되는 포럼에서 제안한 대로 파일을 삭제한 main.cvd
다음 daily.cld
업데이트 도구를 사용하여 다시 다운로드해 보았습니다.
root ~ # ls -ahl /usr/local/share/clamav/
total 145M
drwxr-sr-x 2 clamav clamav 4.0K Mar 26 04:29 .
drwxrwsr-x 10 root staff 4.0K Mar 20 01:59 ..
-rw-r--r-- 1 clamav clamav 65K Mar 26 04:29 bytecode.cvd
-rw-r--r-- 1 clamav clamav 83M Mar 26 04:29 daily.cld
-rw-r--r-- 1 clamav clamav 62M Mar 18 01:17 main.cvd
-rw------- 1 clamav clamav 156 Mar 26 04:29 mirrors.dat
root ~ # rm -f /usr/local/share/clamav/bytecode.cvd /usr/local/share/clamav/daily.cld /usr/local/share/clamav/main.cvd
root ~ # freshclam
ClamAV update process started at Thu Mar 26 04:42:21 2015
Downloading main.cvd [100%]
main.cvd updated (version: 55, sigs: 2424225, f-level: 60, builder: neo)
Downloading daily.cvd [100%]
daily.cvd updated (version: 20242, sigs: 1358870, f-level: 63, builder: neo)
Downloading bytecode.cvd [100%]
bytecode.cvd updated (version: 247, sigs: 41, f-level: 63, builder: dgoddard)
Database updated (3783136 signatures) from db.UK.clamav.net (IP: 129.67.1.218)
제가 찾은 포럼 게시물을 바탕으로 설정 --max-filesize
및 하향 도 시도했습니다.--max-scansize
여기파일/스캔 크기 제한이 2.17GB라고 명시되어 있습니다.
clamscan -r -i --remove --max-filesize=2100M --max-scansize=2100M /DATA1/
하지만 같은 오류가 발생합니다.
이 프로그램은 공식 웹사이트 clamav-0.98.6에서 최신 버전입니다. 다음 옵션을 사용하여 소스에서 구성하고 컴파일합니다.
./configure --enable-bzip2
프로그램 재설치를 시도한 후 먼저 컴파일에서 더 많은 옵션을 설정했습니다(--enable-experimental, --with-dbdir=/usr/local/share/clamav)
제가 아는 마지막 옵션은 이 버전을 제거하고 배포 저장소에서 패키지를 사용해 보는 것입니다. 하지만 가능하다면 이 프로젝트를 성공시키고 싶습니다.
업데이트: 저장소에서 clamav 설치도 시도했지만 동일한 문제/오류가 발생했습니다.
내가 찾은이것, 하지만 오래되었고 문제가 어디에 있는지 모르는 것 같습니다. 그리고여기그러나 여전히 명확한 대답이나 해결책이 없습니다.
제가 스캔하려고 했던 드라이브는 다음과 같습니다:
# df -h
/dev/sdb1 2.7T 2.6T 115G 96% /DATA1
/dev/sdc1 2.7T 2.6T 165G 95% /DATA2
이것은 fdisk입니다:
# fdisk -l
WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.
Disk /dev/sdb: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 1 4294967295 2147483647+ ee GPT
Partition 1 does not start on physical sector boundary.
WARNING: GPT (GUID Partition Table) detected on '/dev/sdc'! The util fdisk doesn't support GPT. Use GNU Parted.
Disk /dev/sdc: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdc1 1 4294967295 2147483647+ ee GPT
Partition 1 does not start on physical sector boundary.
가능한 이유:
시스템 메모리/CPU와 관련이 있을 수 있지만 해당 정보가 없습니다.
내가 찾은이것clamscan은 스캔할 파일을 메모리에 로드하고, 메모리가 부족하면 실패한다는 내용입니다. 이 문제는 최대 4Gigs(시스템의 메모리 양)까지 파일을 스캔하도록 스캐너를 설정할 때 발생할 수 있습니다.
발췌:
파일의 크기는 얼마나 됩니까? 스캐너에 RAM이 얼마나 설치되어 있나요?(물리적 메모리와 스왑 메모리를 분리해 주세요) 현재 ClamAV의 하드 파일 제한은 약 2.17GB입니다. 파일을 메모리에 매핑하기 때문에 전체 파일을 매핑할 메모리가 충분하지 않으면 메모리 매핑 코드(현재 구현된 대로)가 실패하고 파일이 검색되지 않습니다.
우리의 장기 목표 중 하나는 대용량 파일을 제대로 지원할 수 있는지 조사하는 것입니다.
가능한 해결책:
위의 문제(메모리 부족)가 발생하기를 바라면 간단히 시스템 메모리를 8GB로 확장할 수 있지만 12GB 메모리가 있는 시스템에서 이러한 스캔을 실행하려고 하기 때문에 그렇게 간단하지는 않을 것입니다.
편집 #1
다음은 Fedora 21 + 12GB RAM을 갖춘 다른 시스템에서 실행되고 있습니다.
clamscan -r -i --remove --max-filesize=1700M --max-scansize=1700M --exclude=/proc --exclude=/sys --exclude=/dev /
LibClamAV Warning: [Bytecode JIT]: recovered from error
LibClamAV Warning: [Bytecode JIT]: JITed code intercepted runtime error!
LibClamAV Warning: [Bytecode JIT]: Bytecode run timed out, timeout flag set
LibClamAV Warning: Bytcode 27 failed to run: Time limit reached
LibClamAV Error: cli_scanxz: premature end of compressed stream
LibClamAV Error: cli_scanxz: premature end of compressed stream
----------- SCAN SUMMARY -----------
Known viruses: 3779101
Engine version: 0.98.6
Scanned directories: 101382
Scanned files: 744103
Infected files: 0
Total errors: 18419
Data scanned: 285743.78 MB
Data read: 394739.73 MB (ratio 0.72:1)
Time: 32171.073 sec (536 m 11 s)
크기를 2100M-4000M으로 설정하여 동일한 스캔을 실행했을 때 원래 질문에서 언급한 것과 동일한 오류가 발생했습니다.
답변1
나는 이것을 발견했습니다(@FloHimself 덕분에):ClamAV 바이트코드 서명에 대한 간략한 재소개, 프로그램의 일부 용도와 일부 유용한 옵션에 대한 좋은 개요/보완을 제공합니다.
발췌:
바이트코드 서명은 스캔한 파일에 대해 추가 처리를 수행하고 보다 안정적인 탐지를 가능하게 하는 특별한 유형의 ClamAV 서명입니다. 표준 ClamAV 서명 유형과 달리 바이트코드 서명에는 효과적인 사용을 위해 준수해야 하는 여러 가지 고유한 차이점이 있습니다.
믿다
기본적으로 바이트코드 서명은 신뢰할 수 없는 것으로 간주됩니다. 실제로 Cisco가 bytecode.cvd에 게시한 바이트코드 서명만 "신뢰할 수 있는" 것으로 간주됩니다. 즉, 기본적으로 ClamAV 엔진은 신뢰할 수 없는 바이트코드를 로드, 트리거 또는 실행하지 않습니다. 엔진에 bytecode unsigned 옵션을 지정하여 이 보안 메커니즘을 우회할 수 있지만 신뢰할 수 없는 바이트코드 서명을 사용할지 여부는 사용자의 재량에 달려 있다는 점에 유의해야 합니다.
clamscan의 경우 명령줄 옵션은 다음과 같습니다.
--bytecode-unsigned
.
clamd의 경우 BytecodeUnsigned yes
to를 지정해야 합니다 clamd.conf
.
정지시키다
바이트코드 서명은 내부 시간 초과 값으로 지정된 제한된 시간 동안만 실행되도록 설계되었습니다. 실행 시간이 이 값을 초과하면 바이트코드 서명의 실행이 종료되고 사용자에게 통보됩니다. 바이트코드 서명 시간 초과 값은 사용자가 설정할 수 있습니다.
clamscan의 경우 명령줄은 다음과 같습니다.
--bytecode-timeout=[time in ms]
.
BytecodeTimeout [time in ms]
clamd의 경우 로 지정할 수 있습니다 clamd.conf
.
이것은 유용합니다:
문제 보고서
누구든지 clambc 컴파일러나 ClamAV에서 바이트코드 서명 문제가 발생하면 이를 보고할 수 있습니다. https://bugzilla.clamav.net/. 바이트코드 서명, 바이트코드 소스(가능한 경우) 및 기타 유용한 정보를 포함해야 합니다.
답변
--bytecode-timeout=
스캐너가 전체 파일을 스캔할 시간을 갖도록 높게 설정하는 것이 핵심인 것 같습니다 . 기본값은 60000
밀리초/60초입니다. 190000으로 설정했는데 작동하고 시간 초과 오류가 발생하지 않습니다. 이 값을 더 낮게 설정할 수도 있지만 제게는 효과적입니다. 설정 전에 오류가 있는 두 시스템에서 테스트되었습니다.
고쳐 쓰다:
3개의 시스템과 여러 스캔에서 테스트한 결과 이 설정으로 오류가 사라졌습니다 --bytecode-timeout
.
이것은 새로운 명령입니다:
clamscan -r -i --remove --max-filesize=4000M --max-scansize=4000M --bytecode-timeout=190000 /DATA1
노트:
서버 메모리도 8GB로 업그레이드했는데, clamscan이 파일을 스캔할 때 메모리에 파일을 로드하는지 잘 모르겠지만 한 기사에서는 그렇게 많이 언급했고, 그렇다면 그건 또 다른 고려 사항입니다.