mở đầu Mục này được dành ra để trình bày một số nội dung quan trọng làm nền tảng trong công việc phân tích hành vi của mã độc máy tính trong các chương sau này. Hàm băm (Hash) Hàm băm (Hash) là một kỹ thuật quan trọng được sử dụng chủ yếu trong lĩnh vực bảo mật. Hàm băm được định nghĩa là một ánh xạ nhận vào một giá trị đầu vào và cho ra một kết quả duy nhất. Tuy nhiên từ kết quả đầu ra ta không thể trích xuất được giá trị đầu vào ban đầu.2: Ví dụ hoạt động hàm băm MD5 Một số hàm băm phổ biến.
• MD5, Hàm băm MD5 là một trong những hàm băm phổ biến trong quá khứ. Hàm MD5 được phát triển vào những năm 1991 để thay thế hàm băm MD4 vốn đã lỗi thời với khả năng tính toán của máy tính vào thời điểm đó. Hàm băm MD5 mã hóa dữ liệu đầu vào tạo ra 128 bit đầu ra tương đương 32 ký tự trong hệ thập lục phân. Tuy nhiên vào đầu những năm 2000 hàm băm MD5 không còn an toàn trước sức mạnh tính toán của máy tính.
Khiến cho nó không còn được sử dụng trong thực tế. • SHA-1, Secure Hash Algorithm (SHA) được phát triển bởi National Institute of Standard and Technology (NIST). Hàm băm này nhận giá trị đầu vào tối đa là 264 bits và cho đầu ra có độ dài 160 bits • SHA-256, Hàm băm SHA 256 là hàm băm mạnh và linh hoạt. Nó biến đồi giá trị đầu vào và trả lại kết quả có độ dài 256bits.
Ngày nay SHA-256 vẫn được sử dụng cho nhiều mục đích khác nhau. 11 Đinh Đức Đạt Báo cáo Đồ án I Mốt số ứng dụng của hàm băm. • Kiểm tra tính toàn vẹn của tập tin Như đặc điểm của hàm băm, đối với các dữ liệu đầu vào khác nhau thì sẽ cho ra kết quả băm khác nhau. Như vậy đối với các tập tin cần được truyền tải đi thì ta chỉ cần băm tập tin sau đó phía nhận tập tin cũng thực hiện băm và đối chiếu với kết qủa băm ban đầu.
Nếu hai kết quả trừng khớp có nghĩa là tập tin toàn vẹn khi gửi đi còn nếu ngược lại thì có nghĩa tập tin đã bị chỉnh sửa hoặc bị lỗi. • Xác minh mật khẩu Trong các hệ cơ sở dữ liệu hiện đại. Các dữ liệu về mật khẩu không được lưu dưới dạng tường minh. Thay vào đó người ta thực hiện băm giá trị mật khẩu và tiến hành lưu giá trị băm đó.
Điều này là cần thiết bởi trong quá trình vận hành hệ thống nếu hệ thống bị tấn công bởi tin tăc thì tin tặc hoàn toàn không thể có được tài khoản và mật khẩu. WindowAPI Thư viện liên kết động (DLL-Dynamic Link Library) DLL là một dạng chương trình máy tính, là một dạng thư viện có tính năng nâng cao chơ phép các ứng dụng máy tính có thể tham chếu đến và sử dụng nó. Tự bản thân DLL không thể hoạt động độc lập tuy nhiên Khi có một chương trình có khả năng thực thi thì chương trình sẽ liên kết đến thư viên này và thực thi. DLL được coi như là một bộ phận của chương trình.
DLL Chức năng Kernel32.dll Đây là một DLL phổ biến và quan trọng. nó cho phép chương trình truy cập và sử dụng bộ nhớ, tệp và phần cứng.dll Đây là một DLL cung cấp quyền truy cập vào các thành phần Windows cốt lõi như Trình quản lý dịch vụ và Registry.dll DLL này chứa tất cả các thành phần giao diện người dùng Gdi32.dll DLL này chứa các chức năng để hiển thị và thao tác đồ họa.dll Thư viện liên kết động này là một phần của hạt nhân Win- dows. Executables generally do not import this file directly, although it is always imported indirectly by Kernel32. If an executable imports this file, it means that the author in- tended to use functionality not normally available to Win- dows programs.
Một vài tác vụ, ví dụ ẩn hoạt động và đa tiến trình, sẽ sử dụng giao thức này.dll Đây là một DLL thực viện công việc kết nối mạng.dll DLL này chứa các chức năng mạng cấp cao hơn thực hiện các giao thức như FTP, HTTP và NTP.1: Một số thư viện liên kết động phổ biến 12 Đinh Đức Đạt Báo cáo Đồ án I Windows Registry Windows Registry là một cơ sở dữ liệu hệ thống quan trọng trong các hệ điều hành Microsoft Windows. Nó lưu trữ thông tin, cài đặt, và các tùy chọn cho hệ điều hành cũng như các ứng dụng và phần cứng được cài đặt trên máy tính. Registry bao gồm các mục (key) và giá trị (value), giúp hệ điều hành và các ứng dụng hoạt động một cách chính xác và hiệu quả.3: Cấu trúc của Registry. Registry được tổ chức thành một cấu trúc phân cấp giống như cây thư mục với năm nhánh chính, gọi là "hive", mỗi nhánh chứa các khóa và giá trị.
Các hive chính bao gồm: HKEY_CLASSES_ROOT (HKCR): Chứa thông tin về các liên kết tệp và các lớp đối tượng COM. HKEY_CURRENT_USER (HKCU): Chứa các cài đặt và cấu hình của người dùng hiện tại đang đăng nhập. HKEY_LOCAL_MACHINE (HKLM): Chứa các thiết lập và cấu hình phần cứng, phần mềm áp dụng cho tất cả người dùng trên máy tính. HKEY_USERS (HKU): Chứa các cấu hình và thông tin cho tất cả người dùng trên hệ thống.
HKEY_CURRENT_CONFIG (HKCC): Chứa thông tin cấu hình phần cứng hiện tại. Thành phần của Registry bao gồm Key (Khóa) Là các "thư mục" trong cấu trúc 13 Đinh Đức Đạt Báo cáo Đồ án I phân cấp của Registry. Mỗi key có thể chứa các subkey (khóa con) hoặc các giá trị. Mội key trong Registry được lưu trữ các giá trị (value), Mỗi giá trị có một tên và một loại dữ liệu (như chuỗi ký tự, số, hoặc dữ liệu nhị phân) được trình bày theo bảng dưới đây.
Biến Giá trị String (REG_SZ) Giá trị chuỗi ký tự. Binary (REG_BINARY) Giá trị nhị phân, thường dùng để lưu trữ dữ liệu cấu hình phần cứng. DWORD (REG_DWORD) Giá trị số 32-bit. QWORD (REG_QWORD) Giá trị số 64-bit.
Multi-String (REG_MULTI_SZ) Giá trị chứa nhiều chuỗi ký tự. Expandable String (REG_EXPAND_SZ) Giá trị chuỗi có thể chứa các biến môi trường.2: Các loại giá trị trong Registry. Người dùng có thể truy cập và chỉnh sửa Registry thông qua công cụ Registry Editor (regedit). Tuy nhiên, việc chỉnh sửa Registry cần được thực hiện cẩn thận vì các thay đổi sai lầm có thể gây ra lỗi hệ thống nghiêm trọng.4: Giao diện của Regadit.
Windows Registry là một thành phần cốt lõi của hệ điều hành Windows, chứa thông tin quan trọng giúp hệ thống và ứng dụng hoạt động hiệu quả. Việc quản lý và chỉnh sửa Registry yêu cầu kiến thức và kỹ năng để đảm bảo không gây ra các vấn đề nghiêm trọng cho hệ thống. 14 Đinh Đức Đạt Báo cáo Đồ án I IDA (Interactive Disassembler) IDA, viết tắt của Interactive Disassembler, là một công cụ phân tích mã nguồn ngược (reverse engineering) phổ biến được sử dụng rộng rãi trong lĩnh vực bảo mật máy tính và kỹ thuật phần mềm. Được phát triển bởi Hex-Rays, IDA cho phép các nhà phân tích kiểm tra và hiểu mã máy nhị phân (binary code) của phần mềm, ngay cả khi mã nguồn gốc không có sẵn[2].
Dưới đây là một số điểm nổi bật về IDA Tính năng chính của IDA • Disassembly Tương tác: IDA cung cấp khả năng phân giải mã máy nhị phân thành mã hợp ngữ (assembly code), cho phép người dùng tương tác và chỉnh sửa trong quá trình phân tích. • Hỗ trợ Đa Nền Tảng: IDA hỗ trợ nhiều kiến trúc vi xử lý và hệ điều hành khác nhau, bao gồm x86, x64, ARM, MIPS, PowerPC, và nhiều loại khác. • Tự Động và Thủ Công: IDA kết hợp giữa các tính năng phân tích tự động và khả năng can thiệp thủ công của người dùng, cho phép tối ưu hóa quá trình phân tích. • Hình Ảnh Chức Năng (Function Graphs): Công cụ này có thể tạo ra các đồ thị mô tả mối quan hệ giữa các hàm, giúp dễ dàng hiểu luồng điều khiển và cấu trúc của phần mềm.
• Scripting và API: IDA cung cấp khả năng sử dụng ngôn ngữ kịch bản (script- ing) như IDC (IDA Scripting Language) và Python để tự động hóa các tác vụ phân tích. • Hex-Rays Decompiler: Được cung cấp dưới dạng một plugin bổ sung, Hex- Rays Decompiler chuyển đổi mã hợp ngữ trở lại dạng mã nguồn C mức cao, giúp dễ hiểu hơn. Ứng dụng của IDA • Phân Tích Malware: Các nhà phân tích bảo mật sử dụng IDA để nghiên cứu và hiểu cấu trúc của mã độc (malware), từ đó phát hiện các hành vi xấu và phát triển các biện pháp phòng chống. • Nghiên Cứu Bảo Mật: Các nhà nghiên cứu sử dụng IDA để tìm ra lỗ hổng bảo mật trong phần mềm và phần cứng, từ đó đề xuất các biện pháp khắc phục.
• Kỹ Thuật Phần Mềm: Các kỹ sư phần mềm dùng IDA để hiểu và duy trì mã nguồn của các phần mềm không có tài liệu đầy đủ hoặc đã mất mã nguồn gốc. • Nghịch Đảo Phần Mềm (Reverse Engineering): IDA giúp các kỹ sư phân tích và tương tác với mã máy nhị phân để trích xuất thông tin hoặc tái tạo lại mã nguồn. 15 Đinh Đức Đạt Báo cáo Đồ án I IDA là một công cụ mạnh mẽ và linh hoạt, được sử dụng rộng rãi trong cộng đồng bảo mật và kỹ thuật phần mềm. Khả năng phân tích mã nguồn ngược của IDA không chỉ hỗ trợ việc phát hiện và khắc phục các lỗ hổng bảo mật, mà còn giúp hiểu rõ hơn về hoạt động nội tại của phần mềm và phần cứng.
16 Đinh Đức Đạt Báo cáo Đồ án I 1.5 Phân loại mã độc Trong tài liệu của NIST có một số khác biệt theo định nghĩa và cách hiểu thông thường về Virus máy tính đang thông dụng. Ngay trong tên của tài liệu đã nêu lên sự khác biệt, các tác giả nói tới "Malware" chứ không sử dụng thuật ngữ "Virus". Tại Việt Nam hiện nay, thuật ngữ "Virus máy tính" được dùng hết sức rộng rãi và bao hàm tất cả các dạng mã độc hại trên mạng, trong máy tính cá nhân. Khi nói đến "Virus máy tính", một cách rất tự nhiên tất cả mọi người đều nghĩ Virus bao gồm cả Worm, Trojan, Keylogger.
Trong khi theo định nghĩa của NIST (và gần như là của cả cộng đồng IT) Virus, Worm, Trojan horse, Adware, Spyware, Backdoor, Botnet, Launcher, Rootkit,. chỉ là một dạng của mã độc hại. Sự khác biệt này dẫn tới một số khó khăn, ví dụ như khi trao đổi với các tổ chức quốc tế về an toàn thông tin, trao đổi với hỗ trợ kỹ thuật từ các Trung tâm phòng chống Virus của nước ngoài do không đồng nhất về định nghĩa.