1.2 Mục tiêu đồ án Giúp 1 cá nhân hay 1 bộ phận tổ chức hiểu được trong những mục đích sau: Tìm hiểu và cách thu thập thông tin dữ liệu quan trọng như mã độc dựa trên điều tra bộ nhớ
TỔNG QUAN VỀ ĐỀ TÀI
Tổng quan về đồ án
Đồ án sẽ giới thiệu cho chúng ta biết về Điều tra bộ nhớ (memory forensic), nhiệm vụ của Điều tra bộ nhớ.
Mục tiêu đồ án
Giúp 1 cá nhân hay 1 bộ phận tổ chức hiểu được trong những mục đích sau:
Tìm hiểu và cách thu thập thông tin dữ liệu quan trọng như mã độc dựa trên điều tra bộ nhớ
Cách thu thập dữ liệu có lỗ hổng để bảo mật dữ liệu đó
Thực hiện thử nghiệm trên một cách thức liên quan đến phân tích dữ liệu.
Tìm hiểu áp dụng các công cụ hỗ trợ và kỹ thuật thực hiện trên hệ điều hành Windown.
Tổng quan, mục tiêu của đồ án là tăng cường kiến thức và giúp cải thiện thông qua việc tìm hiểu, nghiên cứu và áp dụng các kỹ thuật điều tra.
Nhiệm vụ của đồ án
Trong đồ án này chúng em đặt ra nhiệm vụ đó là hoàn thành các mục tiêu đã đề ra :Viết báo cáo và trình bày kết quả của đồ án để chia sẻ kiến thức và kinh nghiệm về đề tài này.
Yêu cầu về hệ thống
Nền tảng được sử dụng trong đồ án.
Bố cục đồ án
Đồ án báo gồm 4 chương :
Chương 1: Tổng Quan về đề tài , trong chương này chúng ta tìm hiểu khái quát về nội dung đề tài ,đặt ra mục tiêu và nhiệm vụ của đồ án.
Chương 2: Cơ sở lý thuyết , trong chương này thể hiện nội dung lý thuyết xây dụng nên nội dung cốt lõi của đồ án
Chương 3: Thực nghiệm , trong chương này ghi nhận lại quá trình nghiên cứu và tiến hành thực nghiệm báo gồm quá trình và kết quả đạt được dựa trên the volatility framework để điều tra memory forensic.
Chương 4: Phần này sẽ rút ra những lưu ý và ghi chú trong quá trình điều tra bộ nhớ và đưa ra hướng phát triển để giao thức hoàn thiện hơn.
CƠ SỞ LÝ THUYẾT
Khái niệm về điều tra bộ nhớ
Điều tra bộ nhớ được cho là lĩnh vực hiệu quả, thú vị và phấn khích nhất của pháp y kỹ thuật số Mỗi chức năng được thực hiện bởi hệ điều hành hoặc ứng dụng dẫn đến các sửa đổi cụ thể đối với bộ nhớ của máy tính (RAM), điều này thường có thể tồn tại một thời gian dài sau hành động, về cơ bản là bảo tồn chúng Ngoài ra, bộ nhớ pháp y cung cấp khả năng hiển thị chưa từng có về trạng thái thời gian chạy của hệ thống, chẳng hạn như quy trình nào đang chạy, các kết nối mạng đang mở và các lệnh được thực thi gần đây Bạn có thể trích xuất các hiện vật này theo cách hoàn toàn độc lập với hệ thống bạn đang điều tra, giảm khả năng phần mềm độc hại hoặc rootkit có thể can thiệp với kết quả của bạn Dữ liệu quan trọng thường chỉ tồn tại trong bộ nhớ, chẳng hạn như khóa mã hóa ổ đĩa, đoạn mã được chèn trong bộ nhớ trong bộ nhớ, tin nhắn trò chuyện không lưu, tin nhắn e-mail không được mã hóa và bản ghi lịch sử Internet không thể lưu vào bộ nhớ cache
Bằng cách tìm hiểu cách ghi lại bộ nhớ máy tính và lập hồ sơ nội dung của nó, bạn sẽ thêm một tài nguyên vô giá để phản hồi sự cố, phân tích phần mềm độc hại và pháp y kỹ thuật số của bạn các khả năng Mặc dù việc kiểm tra đĩa cứng và chụp gói mạng có thể mang lại kết quả bằng chứng thuyết phục, nó thường là nội dung của RAM cho phép tái tạo đầy đủ sự kiện và cung cấp các mảnh ghép cần thiết để xác định điều gì đã xảy ra trước đó, trong và sau khi bị nhiễm phần mềm độc hại hoặc sự xâm nhập của các tác nhân đe dọa nâng cao Vì ví dụ, manh mối bạn tìm thấy trong bộ nhớ có thể giúp bạn tương quan với các hiện vật pháp y truyền thống có thể có vẻ khác nhau, cho phép bạn tạo các liên kết mà nếu không không được chú ý.
Lịch sử phát triển hệ điều hành Linux
Lịch sử phát triển hệ điều hành Linux bắt đầu vào những năm 1991 khi Linus Torvalds, một sinh viên người Phần Lan, bắt đầu phát triển một hệ điều hành nhỏ để sử dụng trên máy tính cá nhân của mình Sau đó, ông công bố mã nguồn của dự án và mời mọi người tham gia đóng góp Dự án này trở thành nền tảng cho sự phát triển của hệ điều hành Linux.
Giới thiệu về bộ nhớ trên linux
Trong hệ thống Linux, thường thì sẽ sử dụng hai loại bộ nhớ: RAM và SWAP.Trong đó RAM là bộ nhớ thực, sử dụng một linh kiện đặc biệt để lưu trữ còn SWAP là vùng trao đổi, sử dụng một phần đĩa cứng vật lý (một loại bộ nhớ điện tĩnh) để lưu trữ.Tổng dung lượng của 2 loại bộ nhớ này là bộ nhớ khả dụng của hệ thống.
Nhu cầu ứng dụng và Ưu điểm, Nhược điểm hệ điều hành linux
Hệ điều hành Linux được sử dụng rộng rãi trong nhiều lĩnh vực bao gồm máy chủ, thiết bị nhúng, máy tính cá nhân, đào tạo, phát triển phần mềm, học máy, an ninh mạng, và cloud computing Điều này là do tính linh hoạt, hiệu suất cao, và mã nguồn mở của Linux, làm cho nó trở thành lựa chọn phổ biến cho cả cá nhân và doanh nghiệp.
2.4.2 Ưu điểm và Nhược điểm
- Ưu điểm: Miễn phí và được hỗ trợ các ứng dụng văn phòng OpenOffice và LibreOffice.Tính bảo mật cao Tính linh hoạt, người dùng có thể chỉnh sửa hệ điều hành để phù hợp với nhu cầu sử dụng của mình Không lo sợ giật, lag, không chạy nổi,
…trên các máy tính có cấu hình không cao.
- Nhược điểm: Các nhà phát triển phần mềm vẫn chưa để tâm đến hệ điều hành tiềm năng này nên số lượng phần mềm được hỗ trợ vẫn còn hạn chế Một số nhà sản xuất không phát triển driver hỗ trợ nền tảng Linux.
Cấu trúc hệ điều hành Linux
Kernel: Hay được gọi là phần Nhân vì đây là phần quan trọng nhất trong máy tính bởi chứa đựng các module hay các thư viện để quản lý, giao tiếp giữa phần cứng máy tính và các ứng dụng.
Shell: Shell là phần có chức năng thực thi các lệnh (command) từ người dùng hoặc từ các ứng dụng yêu cầu, chuyển đến cho Kernel xử lý Shell chính là cầu nối để kết nốiKernel và Application, phiên dịch các lệnh từ Application gửi đến Kernel để thực thi
Có các loại Shell như sau: sh (the Bourne Shell), bash(Bourne-again shell), csh (C shell), ash (Almquist shell), tsh (TENEX C shell), zsh (Z shell).
Application: Đây là phần quen thuộc với chúng ta nhất, phần để người dùng cài đặt ứng dụng, chạy ứng dụng để người dùng có thể phục vụ cho nhu cầu của mình.
Giới thiệu tổng quan về hệ thống
PC bao gồm các bảng mạch in kết nối các thành phần khác nhau và cung cấp các đầu nối cho các thiết bị ngoại vi Bo mạch chính trong loại hệ thống này, bo mạch chủ, cung cấp các kết nối cho phép các thành phần của hệ thống giao tiếp Các kênh giao tiếp này thường được gọi là bus máy tính Phần này làm nổi bật các thành phần và bus mà điều tra viên nên quen thuộc Hình 2-1 minh họa cách tổ chức các thành phần khác nhau được thảo luận trong phần này.
Hình ảnh 1 Tổ chức vật lý của một hệ thống hiện đại. Đọc từ bộ nhớ chính thường chậm hơn đáng kể so với đọc từ CPU bộ nhớ riêng Do đó, các hệ thống hiện đại tận dụng nhiều lớp bộ nhớ nhanh, được gọi là bộ nhớ đệm, để giúp bù đắp sự chênh lệch này Mỗi mức bộ nhớ đệm (L1, L2, v.v.) là tương đối chậm hơn và lớn hơn so với người tiền nhiệm của nó Trong hầu hết các hệ thống, các bộ nhớ đệm này được tích hợp vào bộ xử lý và từng lõi của nó Nếu dữ liệu không được tìm thấy trong một bộ đệm nhất định, thì dữ liệu phải được tìm nạp từ bộ nhớ đệm cấp độ tiếp theo hoặc bộ nhớ chính CPU dựa vào đơn vị quản lý bộ nhớ (MMU) của nó để giúp tìm dữ liệu ở đâu được lưu trữ MMU là đơn vị phần cứng dịch địa chỉ mà bộ xử lý yêu cầu đến địa chỉ tương ứng của nó trong bộ nhớ chính Như chúng ta mô tả ở phần sau của chương này, các cấu trúc dữ liệu để quản lý việc dịch địa chỉ cũng được lưu trữ trong bộ nhớ chính Bởi vì một bản dịch nhất định có thể yêu cầu nhiều thao tác đọc bộ nhớ, bộ xử lý sử dụng một bộ đệm đặc biệt, được gọi là bộ đệm xem xét dịch (TLB), cho bảng dịch MMU Trước mỗi lần truy cập bộ nhớ, TLB được hỏi ý kiến trước khi yêu cầu MMU thực hiện một hoạt động dịch địa chỉ tốn kém.
Bạn xây dựng cấu trúc dữ liệu bằng cách sử dụng các kiểu dữ liệu cơ bản mà một chương trình cụ thể ngôn ngữ cung cấp Bạn sử dụng các kiểu dữ liệu cơ bản để chỉ định cách một tập hợp các bit cụ thể được sử dụng trong một chương trình Bằng cách chỉ định một kiểu dữ liệu, lập trình viên ra lệnh cho tập của các giá trị có thể được lưu trữ và các hoạt động có thể được thực hiện trên các giá trị đó.Những kiểu dữ liệu này được gọi là kiểu dữ liệu cơ bản hoặc nguyên thủy vì chúng không được định nghĩa theo các kiểu dữ liệu khác trong ngôn ngữ đó Trong một số ngôn ngữ lập trình, các kiểu dữ liệu cơ bản có thể ánh xạ trực tiếp đến các kiểu dữ liệu phần cứng gốc được hỗ trợ bởi kiến trúc bộ xử lý Điều quan trọng cần nhấn mạnh là các kiểu dữ liệu cơ bản thường khác nhau giữa các ngôn ngữ lập trình và kích thước bộ nhớ của chúng có thể thay đổi tùy theo trên phần cứng cơ bản.
Mảng: Cơ chế đơn giản nhất để tổng hợp dữ liệu là mảng một chiều Đây là tập hợp các cặp , trong đó các phần tử có kiểu dữ liệu thuần nhất Kiểu dữ liệu của các phần tử được lưu trữ sau đó thường được gọi là kiểu mảng Một đặc điểm quan trọng của một mảng là kích thước của nó được cố định khi một phiên bản của mảng được tạo, sau đó giới hạn số lượng phần tử có thể được lưu trữ Hình 2-2 cho thấy một ví dụ về mảng một chiều
Hình ảnh 2 Hình nói về mảng 1 chiều.
Danh sách được liên kết:Danh sách liên kết là một kiểu dữ liệu trừu tượng thường được sử dụng để lưu trữ một tập hợp các phần tử Không giống như các mảng và bản ghi có kích thước cố định, danh sách được liên kết nhằm cung cấp một cấu trúc linh hoạt Cấu trúc có thể hỗ trợ hiệu quả các bản cập nhật động và không bị ràng buộc với đối với số lượng phần tử mà nó có thể lưu trữ Một sự khác biệt lớn nữa là danh sách liên kết không được lập chỉ mục và được thiết kế để cung cấp quyền truy cập tuần tự thay vì ngẫu nhiên truy cập Danh sách liên kết nhằm mục đích hiệu quả hơn cho các chương trình cần thường xuyên thao tác với bộ sưu tập đã lưu trữ bằng cách thêm, bớt hoặc sắp xếp lại các phần tử Đây hiệu quả tăng thêm được thực hiện bằng cách sử dụng các liên kết để biểu thị mối quan hệ giữa các yếu tố và sau đó cập nhật các liên kết đó khi cần thiết Phần tử đầu tiên của danh sách thường là được gọi là phần đầu và phần tử cuối cùng là phần đuôi Theo các liên kết từ đầu đến đuôi và đếm số phần tử có thể xác định số phần tử được lưu trữ trong một danh sách liên kết.
Hình ảnh 3 Hình chỉ về ví dụ danh sách liên kết đơn. Để hỗ trợ các đặc tính động của danh sách được liên kết và giảm thiểu các yêu cầu lưu trữ, việc triển khai ngôn ngữ lập trình C thường cấp phát và phân bổ bộ nhớ để lưu trữ các phần tử khi cần thiết Do đó, bạn không thể giả định rằng các phần tử sẽ được lưu trữ liên tục trong bộ nhớ Hơn nữa, thứ tự tuần tự của các phần tử không ngầm định đối với vị trí bộ nhớ của chúng, như trường hợp của các mảng Thay vì, mỗi phần tử của danh sách được lưu trữ riêng biệt và các liên kết được duy trì với phần tử lân cận các yếu tố Trong một số triển khai, các liên kết được lưu trữ nhúng trong phần tử (lưu trữ nội bộ) Trong các triển khai khác, các nút của danh sách được liên kết chứa các liên kết đến các nút lân cận và một liên kết đến địa chỉ trong bộ nhớ nơi phần tử đang được được lưu trữ (bộ nhớ ngoài) Trong cả hai trường hợp, bạn triển khai các liên kết giữa các nút bằng cách sử dụng con trỏ giữ địa chỉ bộ nhớ ảo của nút lân cận Do đó, để truy cập một phần tử tùy ý của danh sách, bạn phải duyệt qua danh sách được liên kết bằng cách làm theo các con trỏ tuần tự thông qua không gian địa chỉ ảo.
Danh Sách liên kết hình tròn: Một ví dụ về triển khai danh sách liên kết được sử dụng thường xuyên trong nhân Linux là vòng tròn danh sách liên kết Nó được gọi là danh sách liên kết vòng tròn vì liên kết cuối cùng được lưu trữ với đuôi đề cập đếnđến nút ban đầu trong danh sách (đầu danh sách) Điều này đặc biệt hữu ích cho các danh sách trong đó đặt hàng không quan trọng Một danh sách liên kết vòng tròn được duyệt qua bằng cách bắt đầu từ một nút danh sách và dừng khi duyệt danh sách trở lại nút đó. Hình 2-4 cho thấy một ví dụ về danh sách liên kết vòng tròn Như đã thảo luận chi tiết hơn trong các chương sau, loại này danh sách liên kết đã được sử dụng trong nhân Linux để tính toán quy trình.
Hình ảnh 4 Hình chỉ về ví dụ danh sách liên kết đơn.
The Volatility là một bộ sưu tập các công cụ hoàn toàn mở, được triển khai trongPython theo Giấy phép Công cộng GNU 2 Các nhà phân tích sử dụng Biến động cho trích xuất các hiện vật kỹ thuật số từ các mẫu bộ nhớ bay hơi (RAM) Bởi vì sự biến động là mã nguồn mở và miễn phí để sử dụng, bạn có thể tải xuống khuôn khổ và bắt đầu thực hiện phân tích nâng cao mà không phải trả một xu Hơn nữa, khi hiểu được cách công cụ của bạn hoạt động bên dưới mui xe, không có gì ngăn cản bạn và mã nguồn — bạn có thể khám phá và học hỏi hết khả năng của mình Chương này bao gồm các thông tin cơ bản bạn cần để cài đặt Volatility, cấu hình môi trường và làm việc với các plugin phân tích Nó cũng giới thiệu cho bạn những lợi ích của sử dụng Biến động và mô tả một số thành phần bên trong làm cho công cụ trở thành sự thật khuôn khổ Ngoài ra, hãy nhớ rằng phần mềm phát triển theo thời gian Do đó, khuôn khổ của khả năng, plugin, cân nhắc cài đặt và các yếu tố khác có thể thay đổi trong tương lai.
Một khuôn khổ liên kết, duy nhất Sự biến động phân tích bộ nhớ từ 32-bit và 64-bit
Hệ thống Windows, Linux, Mac (và Android 32-bit) Thiết kế mô-đun của Valatility cho phép nó dễ dàng hỗ trợ các hệ điều hành và kiến trúc mới như chúng vốn có phát hành. Đây là mã nguồn mở GPLv2 Điều này có nghĩa là bạn có thể đọc mã nguồn, học hỏi từ nó, và mở rộng nó Bằng cách tìm hiểu cách hoạt động của Volatility, bạn sẽ trở nên hiệu quả hơn nhà phân tích.
2.6.3.1 Xếp chồng không gian địa chỉ
Một số loại AS khác nhau mà bạn đã học cho đến nay thường được sử dụng nhất cùng hỗ trợ lẫn nhau Để giúp bạn hình dung sự tương tác này, hãy xem Hình 2-5 Sơ đồ này cho thấy cách các AS tự động xếp chồng lên nhau để hỗ trợ nhiều loại tệp và kiến trúc phần cứng mà Volatile có thể hoạt động.
Hình ảnh 5 Hình nói về cac AS xếp chồng đang hoạt động
Trong ví dụ này, bạn đang xử lý sự cố kết xuất từ hệ thống Windows 64 bit Khi một plugin Biến động yêu cầu đọc một địa chỉ ảo, địa chỉ đó sẽ được chuyển đến đầu tiên AMD64 AS, thực hiện việc dịch địa chỉ ảo sang địa chỉ vật lý Kết quả là một khoảng bù trong bộ nhớ vật lý, trong đó dữ liệu mong muốn có thể được tìm thấy Nếu bạn có một kết xuất bộ nhớ thô (có đệm), phần bù này giống như phần bù vào bộ nhớ tập tin dump Tuy nhiên, vì tệp kết xuất sự cố chứa nhiều tiêu đề khác nhau và cũng có thể chia các phạm vi bộ nhớ không liền kề thành "lần chạy", phần bù vào bộ nhớ vật lý không giống như phần bù vào tệp kết xuất sự cố Đây là nơi mà AS kết xuất sự cố đi vào chơi Sự cố kết xuất AS biết tiêu đề của nó lớn như thế nào và có thể phân tích cú pháp thông tin liên quan đến nơi các phạm vi bộ nhớ được lưu trữ, cho phép nó ghép lại với nhau quan điểm ban đầu của bộ nhớ vật lý Do đó, AS kết xuất sự cố có thể dễ dàng tìm thấy bù đắp trong tệp bên dưới.
Lệnh Biến động cơ bản nhất được xây dựng như sau Bạn thực thi Python chính script (vol.py) và sau đó chuyển nó đường dẫn đến tệp kết xuất bộ nhớ của bạn, tên của cấu hình, và plugin để thực thi (và tùy chọn các thông số dành riêng cho plugin):
$ python vol.py –f profile= [ARGS] Đây là một ví dụ
$ python vol.py –f /home/mike/memory.dmp profile=Win7SP1x64 pslist
# Nếu bạn sử dụng tệp thực thi Windows độc lập, thì cú pháp sẽ giống như thế này C:\>volatlity-2.4.exe –f C:\Users\Mike\memory.dmp profile=Win7SP1x64 pslist
# Có một số ngoại lệ đối với lệnh cơ bản được hiển thị, chẳng hạn như khi bạn gọi
# Biến động với -h / - trợ giúp (để xem các tùy chọn toàn cầu), với info (để xem tất cả các AS có sẵn, plugin và cấu hình), hoặc nếu bạn chưa biết cấu hình nào để sử dụng.
Một số tùy chọn dòng lệnh có phạm vi toàn cầu (tức là chúng áp dụng cho tất cả các plugin) nếu bạn mới đối với Biến động hoặc nếu bạn chỉ muốn làm quen với những tùy chọn bạn có thể chỉnh sửa, hãy nhớ đọc kỹ phần này Để hiển thị menu trợ giúp chính, hãy nhập –h / - help trên dòng lệnh Nó cho thấy các tùy chọn chung (bao gồm các giá trị mặc định, nếu có) và liệt kê các plugin có sẵn cho hồ sơ hiện được chỉ định.Nếu bạn không chỉ định một hồ sơ, bạn sẽ làm việc với mặc định, WinXPSP2x86, vì vậy bạn sẽ chỉ thấy các plugin hợp lệ cho hệ điều hành đó và kiến trúc (ví dụ: bạn sẽ không thấy plugin Linux hoặc plugin Windows hoạt động chỉ trên Vista) Đây là một ví dụ:
Usage: Volatility - A memory forensics analysis platform.
# liệt kê tất cả các tùy chọn có sẵn và giá trị mặc định của chúng Giá trị mặc định có thể được đặt trong tệp cấu hình etc/volualityrc
conf-file=/Users/michaelligh/volatilityrc
# Tệp cấu hình dựa trên người dùng
#Các thư mục plugin bổ sung để sử dụng (phân tách bằng dấu hai chấm)
# In thông tin về tất cả các đối tượng đã đăng ký
cache-directory=/Users/michaelligh/cache/volatility
# Thư mục nơi lưu trữ các tệp bộ đệm
# Sử dụng bộ nhớ đệm
# Đặt múi giờ để hiển thị dấu thời gian
# Tên tệp để sử dụng khi mở một hình ảnh
# Tên của hồ sơ để tải
# Vị trí URN để tải không gian địa chỉ
Giới thiệu về điều tra bộ nhớ trên Linux
Sau khi vi phạm mạng, những câu hỏi đầu tiên phải được trả lời thường là: Hệ thống nào ban đầu bị nhiễm, máy nào bị xâm nhập sau đó thông qua chuyển động ngang và hệ thống từ xa nào đã tham gia vào quá trình lọc dữ liệu hoặc chỉ huy và kiểm soát? Volatility rất quan trọng để trả lời những câu hỏi này bởi vì rất ít hiện vật liên quan được ghi vào đĩa Trong chương này, bạn sẽ học cách này dữ liệu được lưu trữ trong các mẫu bộ nhớ Linux, bạn có thể làm gì để khôi phục dữ liệu và cách rút ra kết luận dựa trên những gì bạn tìm thấy.
Hệ thống Linux hỗ trợ nhiều giao diện mạng mà bạn có thể định cấu hình cho các tuyến và mạng con Để hiểu hoàn toàn luồng dữ liệu mạng thông qua một máy chủ với nhiều giao diện, bạn phải khôi phục thông tin về từng thiết bị
Mục tiêu phân tích: Mục tiêu của bạn là: Hiểu các giao diện mạng Linux: Các bản phân phối Linux có một tiêu chuẩn khá quy ước đặt tên cho các giao diện Hiểu quy ước này có thể giúp bạn Tạo tác mạng 647 hiểu loại giao diện Linux cũng hỗ trợ các bí danh giao diện phải được tính đến trong quá trình phân tích.
Xác định xem giao diện mạng có đang ở chế độ quảng cáo hay không:
Quảng cáo chế độ thiết bị mạng có khả năng đánh giá lưu lượng truy cập của tất cả các máy tính được kết nối vào mạng con (nếu đang sử dụng một trung tâm hoặc bộ định tuyến không dây không an toàn) Biến động báo cáotrạng thái chế độ lăng nhăng của mỗi giao diện mạng.
Xác định các ứng dụng đang đánh hơi lưu lượng mạng: Sau khi xác định được rằng thiết bị mạng đang ở chế độ bừa bãi, khi đó bạn muốn tìm hiểu lý do Cáccách duy nhất bạn có thể thực hiện điều này là khám phá ứng dụng nào sử dụng nguyên ổ cắm và sau đó xác định việc sử dụng ổ cắm
Cấu trúc dữ liệu: Mỗi thiết bị mạng được đại diện bởi một cấu trúc có tên net_device.
Cấu trúc này là được hiển thị cho hình ảnh bộ nhớ mẫu Debian, nhưng nó có thể thay đổi đáng kể trên tất cả các phiên bản hạt nhân được hỗ trợ khác nhau May mắn thay, các thành viên được sử dụng bởi Volatility vẫn khá ổn định.
Hình ảnh 6 Hình ảnh cho thấy cấu trúc dữ liệu mạng.
2.7.1.2 Thông tin giao diện danh sách.
Plugin linux_ifconfig liệt kê tất cả các giao diện mạng đang hoạt động, bao gồm cả IP của chúng địa chỉ, địa chỉ MAC, tên, cài đặt lăng nhăng và bí danh Trên các phiên bản hạt nhân cũ hơn, nó liệt kê các thiết bị mạng bằng cách xem danh sách được lưu trữ trong biến thể toàn cầu dev_base có thể Trên các hạt nhân mới hơn có hỗ trợ không gian tên, nó đi qua từng không gian tên mạng và sau đó xem danh sách các thiết bị. Để xác định tất cả các tên giao diện và bí danh của một thiết bị, thành viên ip_ptr được sử dụng, là kiểu in_device Danh sách các thiết bị được lưu trữ trong thành viên ifa_list của nó Bạn có thể tìm thấy tên của từng thiết bị hoặc bí danh trong thành viên ifa_label và địa chỉ IP trong ifa_address Phần sau cho thấy kết quả đầu ra từ linux_ifconfig trên mẫu bộ nhớ Debian:
Hình ảnh 7 Hình ảnh đầu ra từ linux_ifconfig trên mẫu bộ nhớ Debian.
Trong đầu ra này, bạn có thể thấy hình 2.14 hai thiết bị đang hoạt động: lo (localhost) và eth0 Localhost có một Địa chỉ IP của 127.0.0.1 và không có địa chỉ MAC vì nó là thiết bị giả Ethernet giao diện có đặt địa chỉ IP và MAC Cả hai thiết bị đều không ở chế độ quảng cáo.
2.7.2 Giới thiệu về hệ thống tệp tin trong bộ nhớ.
Khi các tệp được mở, tạo, đọc và ghi, hệ điều hành sẽ lưu trữ thông tin về các hành động này trong một số cấu trúc dữ liệu Các hiện vật liên quan bao gồm cấu trúc thư mục, siêu dữ liệu (bao gồm cả dấu thời gian) và thậm chí cả nội dung của các tệp được truy cập gần đây Đặc biệt trên Linux, trong đó hệ thống tệp chỉ bộ nhớ được sử dụng trên gần như mọi bản phân phối, những phần tạo tác như vậy sẽ bị mất khi máy bị tắt nguồn.
Do đó, trong nhiều trường hợp, bảo quản RAM là phương pháp tốt nhất (và đôi khi là duy nhất) để xác định những tệp mà kẻ tấn công truy cập, nơi rootkit ẩn hoặc những gì đã được giới thiệu do kết quả của cuộc tấn công trình duyệt phía máy khách.
2.7.2.1 Hệ thống tệp được gắn kết.
Linux duy trì một danh sách các hệ thống tệp được gắn kết tích cực trong bộ nhớ nhân. Một trong những hầu hết các nhiệm vụ phân tích cơ bản là xác định danh sách này và có ấn tượng ban đầu ên cho dù một tệp đã được mở từ đĩa cứng cục bộ, qua Hệ thống Tệp Mạng từ xa (NFS) hoặc ổ đĩa Server Message Block (SMB) hoặc thẻ USB bên ngoài
Xác định do thám và theo dõi: Nhiều công ty có máy chủ tệp nội bộlưu trữ tài sản trí tuệ Bất kỳ kẻ tấn công có năng lực nào sẽ ngay lập tức cố gắng tìm và gắn kết các chia sẻ mạng thú vị, để lấy các tệp cụ thể hoặc tìm kiếm bất kỳ tệp nào có chứa các điều khoản nhất định liên quan đến động cơ của kẻ tấn công Nếu bạn chụp RAM trong thời gian này, hoặc nếu kẻ tấn công không thể ngắt kết nối phần chia sẻ, thì các thành phần của hoạt động như vậy hiện diện trong kết xuất bộ nhớ.
Phát hiện xâm nhập dữ liệu: Các nhân viên bất mãn thường mang USB vào nơi làm việc để sao chép các tệp nhạy cảm và rò rỉ chúng sau đó Nếu bạn xác định rằng ổ đĩa ngoài đã được sử dụng gần đây, bạn nên thêm thông tin về thiết bị vào danh sách bằng chứng của bạn để khôi phục.
Hiểu các quy ước gắn kết Linux: Không giống như các hệ thống Windows, hệ thống này thường cài đặt mọi thứ trong cùng một phân vùng (hoặc nhiều nhất là chúng sử dụng một dữ liệu và một Phân vùng hệ điều hành), các hệ thống Linux sử dụng nhiều phân vùng để lưu trữ các tập dữ liệu Linux có thể cũng sử dụng các hệ thống tệp tạm thời, chỉ dành cho bộ nhớ, có các quy trình pháp lý thú vị hàm ý.
Cấu trúc dữ liệu: Trong Linux, bảng băm cho phép bạn tìm tất cả các cấu trúc hệ thống tệp được gắn kết là được trỏ tới bởi ký hiệu hạt nhân mount_hashtable Tùy thuộc vào phiên bản hạt nhân của bạn, mỗi phần tử trong bảng băm là cấu trúc gắn kết (các hạt nhân cũ hơn) hoặc cấu trúc vfsmount (hạt nhân mới hơn) Đây là cách cấu trúc xuất hiện cho hệ thống Debian 3.2 64-bit:
Hình ảnh 8 Hình ảnh liên kết cấu trúc gắn kết với cấu trúc vfsmount
So sánh bộ nhớ trên Linux 32 và 64 bit
2.8.1 So Sánh Địa chỉ Bộ Nhớ:
32-bit: Có thể chỉ định tối đa 4 gigabyte bộ nhớ.
64-bit: Cung cấp khả năng địa chỉ tới 18.4 million terabyte bộ nhớ.
32-bit: Có thể gặp hạn chế về bộ nhớ khi xử lý các tác vụ đòi hỏi nhiều bộ nhớ. 64-bit: Hiệu năng có thể được cải thiện đáng kể trong các ứng dụng và tác vụ sử dụng nhiều bộ nhớ.
32-bit: Tương thích tốt với các ứng dụng và driver cũ, nhưng có thể gặp hạn chế về bộ nhớ.
64-bit: Hỗ trợ tốt cho các ứng dụng và driver mới, đồng thời có khả năng sử dụng bộ nhớ lớn hơn.
64-bit: Cung cấp một số lợi ích bảo mật như sự khó khăn trong việc thực hiện các kỹ thuật tấn công như buffer overflow.
64-bit: Có thể cung cấp hiệu suất cao hơn trong nhiều trường hợp, đặc biệt là khi xử lý dữ liệu lớn và các tác vụ tính toán phức tạp.
Khả năng tận dụng bộ nhớ RAM:
Hệ điều hành 64 bit có thể tận dụng được nhiều bộ nhớ RAM hơn so với hệ điều hành
32 bit Với hệ điều hành 64 bit, bạn có thể sử dụng lên tới 128GB RAM, trong khi với hệ điều hành 32 bit, bạn chỉ có thể sử dụng tối đa 4GB RAM.
2.8.2 So sánh khi dump khác quyền
Dump với Quyền Người Dùng (User Dump): Ưu điểm: Đơn giản và dễ triển khai, không đòi hỏi quyền đặc quyền Có thể thực hiện bởi người dùng thông thường mà không cần sự can thiệp của quản trị viên hệ thống. Nhược điểm: Hạn chế trong việc sao lưu các dữ liệu có quyền truy cập cao hoặc các hệ thống quan trọng.
Không thể truy cập được một số tệp/tiện ích yêu cầu quyền đặc quyền cao.
Dump với Quyền Quản Trị (Admin Dump): Ưu điểm: Có thể sao lưu toàn bộ hệ thống, bao gồm cả các tệp và thư mục có quyền truy cập cao Thường có sự hỗ trợ tốt hơn cho việc sao lưu và phục hồi các tệp hệ thống quan trọng.
Nhược điểm: Yêu cầu quyền đặc quyền (root hoặc administrator) để thực hiện dump.
Cần cẩn thận để tránh làm mất dữ liệu quan trọng hoặc gây ảnh hưởng đến tính ổn định của hệ thống
Công cụ và phần mềm hỗ trợ
2.9.1 Phân tích rsync: Là một công cụ mạnh mẽ cho việc sao lưu và đồng bộ dữ liệu giữa các thư mục hoặc máy chủ Rsync hỗ trợ sao lưu qua SSH và có nhiều tùy chọn linh hoạt. tar: Là một công cụ nén và sao lưu tiêu biểu trên Linux Bạn có thể sử dụng tar để tạo ra các tệp nén từ một thư mục hoặc tệp tin cụ thể. dump và restore: Các lệnh dump và restore có sẵn trên một số hệ điều hành Linux và được sử dụng để sao lưu và phục hồi hệ thống tệp tin.
Bacula: Là một hệ thống quản lý sao lưu mã nguồn mở, hỗ trợ việc quản lý, lên lịch, và khôi phục các sao lưu.
Amanda: Là một hệ thống sao lưu mã nguồn mở cho phép bạn quản lý và tự động hóa việc sao lưu trên nhiều máy chủ.
Duplicity: Là một công cụ sao lưu mã nguồn mở kết hợp với mã hóa và sao lưu theo kiểu incrementals.
Trong doanh nghiệp, việc thực hiện dump dữ liệu đóng vai trò quan trọng trong việc bảo vệ và quản lý thông tin quan trọng Một ứng dụng cụ thể có thể là khi quản trị viên hệ thống thường xuyên thực hiện dump định kỳ của cơ sở dữ liệu doanh nghiệp Bằng cách này, họ tạo ra các bản sao lưu dữ liệu đầy đủ và có thể phục hồi nhanh chóng trong trường hợp xảy ra sự cố như mất dữ liệu, lỗi người dùng, hoặc tình huống khẩn cấp.
QUÁ TRÌNH THỰC NGHIỆM
Mục tiêu triển khai Footprinting
Mô hình này giúp chúng ta thấy được tổng quan về quá trình thu thập dữ liệu thông tin cần thiết.
Mô hình ứng dụng
Hình ảnh 10 Mô hình ứng dụng
Yêu cầu thực hiện
Yêu Cầu: máy kali-linux có kết nối Internet (thực hiện trên Vmware):
Cấu hình: Địa chỉ IP 192.168.1.23
Quy trình chuẩn bị khai thác
Thiết bị: Máy Kali linux có kết nối Internet:
Công cụ: Volatility để thu thập thông tin thụ động trên đó.
Phần mềm hỗ trợ: firefox tải file cridex.vmem.
Các bước triển khai và Kết quả
Bước 1: lên firefox tải công cụ volatility và file cridex.vmem về phân tích
Hình ảnh 11 Quá trình cài đặt công cụ volatility và mã độc cridex Kết quả sau khi tải thành công 2 nguồn > sau đó giải nén file để thực thi.
Hình ảnh 12 Hình đã tải xong các công cụ phân tích và tẹp tin phân tích.Bước 2: chúng ta chạy công cụ volatility với câu lệnh /volatility -h để xem tất cả các option của công cụ này.
Hình ảnh 13 Hình dùng lệnh của volatility.
Hình ảnh 14 Hình ảnh chỉ ra lệnh help của volatility.
Bước 3: sau đó chúng ta tiến hành mục tiêu chính là file cridex.vmem > dùng lệnh /volatility -f cridex.vmem imageinfo để xem lớp ngoài của file này xem có những thứ gì Chúng ta thấy được processes profile là: WinXPSP2x86
Hình ảnh 15 Phân tích cridex.vmem bằng volatility
Bước 4: sau khi đọc những thông tin trên chúng ta tiếp tục tiến hành dùng lệnh option pslist (pslist dùng để liệt kê các tiến trình của file cridex.vmem) với lệnh
./volatility -f cridex.vmem profile=WinXPSP2x86
Hình ảnh 16 Phân tích cridex.vmem với option pslist
Ta thấy được có hơn 20 processes list được chạy bởi file cridex.vmem và đặc biệt hơn là PID 1484 của explorer.exe (file quan trọng nhất của tiến trình) và PPID của reader_sl.exe trùng nhau chúng ta có thể giả tưởng ra 1 kịch bản tấn công này là nghe lén.
Bước 5: để thấy rõ hơn về sự liên quan giữa các processeslist chúng ta dùng lệnh pstree để xem tiến trình dạng cây để rõ ràng với lệnh
./volatility -f cridex.vmem profile=WinXPSP2x86 pstree
Hình ảnh 17 Phân tích cridex.vmem bằng option pstree
Bước 6: sau khi biết chúng có liên quan với nhau bây giờ mình dùng option psxview để kiểm tra sâu hơn xem có những thông tin nào dc lộ ra bên ngoài không Với lệnh ./volatility -f cridex.vmem –profile=WinXPSP2x86 psxview
Hình ảnh 18 Phân tích cridex.vmem bằng option psxview
Sau khi dùng lệnh chúng ta thấy được nếu trên thực tế true hết thì không có vấn đề gì nhưng ngược lại false thì chúng ta có thể hiểu rằng tẹp file này có thể lỗi cái gì đó hoặc là có điều gì đó chưa được xác định.
Bước 7: chúng ta tiếp tục dùng option connscan để kiểm tra về một kết nối đang hoạt động hay không với lệnh
/volatility -f cridex.vmem –profile=WinXPSP2x86 connscan
Hình ảnh 19 Phân tích cridex.vmem bằng option connscan.
Lúc này chúng ta thấy được với Pid là 1484 nhưng được kết nối bởi 2 địa chỉ IP. Bước 8: chúng ta dùng option Sockets để liệt danh sách cái processes pid liên quan đến socket với lệnh
/volatility -f cridex.vmem –profile=WinXPSP2x86 sockets
Hình ảnh 20 Phân tích cridex.vmem bằng option sockets.
Sau khi dùng lệnh ta thấy được có cái processes Pid 1484 có liên quan tới cái port
1038 như trên bước 8 chúng ta thực thi và với protocol là giao thức TCP.
Bước 9: kiểm tra quá trình thực thi file cridex.vmem những lần cuối mới nhất với lệnh /volatility -f cridex.vmem –profile=WinXPSP2x86 cmdline
Hình ảnh 21 Phân tích cridex.vmem bằng option cmdline
Sau khi chạy xong, chúng ta thấy được cái tẹp reader_sl.exe có Pid 1640 mà ở trên bước 2 và bước 3 Chúng ta liệt kê được file này có liên quan đến explorer.exe với pid 1484.
Bước 10: chúng ta sẽ Scan file này để xem có file ẩn nào khác hay không Với lệnh ./volatility -f cridex.vmem –profile=WinXPSP2x86 procdump -p 1640 dump-dir
Hình ảnh 22 Scan file với PID 1640 Chúng ta thấy được excutable.1640.exe, file này là file ẩn mình của file reader_sl.exe
Bước 11: chúng ta vào virustotal.com để xem file này có phải là file mã độc hay không Chọn vào file excutalble.1640.exe
Hình ảnh 23 Hình sử dụng virustotal để kiểm tra mã độc
Chúng ta thấy được những lời cảnh báo của trang này với trojan, detected, Riskware….
Bước 12: chúng ta xuất file ra ngoài dùng lệnh
./volatility -f cridex.vmem –profile=WinXPSP2x86 memdump -p 1640 dump-dir
Hình ảnh 24 Hình ảnh sử dụng câu lệnh để lấy file 1640 sau khi scan ra ngoài Bước 13: tiếp theo chúng ta xem thông tin bên trong file dùng lệnh. strings 1640.dmp |grep -Fi “41.168.5.140” -C 5
Hình ảnh 25 Sử dụng lệnh strings để kiểm tra
Bước 14: để xem thông tin tóm gọn dùng lệnh strings 1640.dmp |less
Hình ảnh 26 Sử dụng lệnh string để đi sâu vào mã độc
Chúng ta thấy được đây chắc chắn là mã độc tống tiền hoặc có thể hơn là những mã độc khác nhưng ta thấy rất nhìu đường link ngân hàng trong file mã độc này.
Bước 15: chúng ta sẽ đi vào tìm key của file và tìm thấy được rất nhiều tệp tin hỗ trợ chạy trong điều hành với lệnh.
./volatility -f cridex.vmem profile=WinXPSP2x86 hivelist
Hình ảnh 27 Sử dụng option hivelist để xem tệp tin hỗ trợ
Bước 16: sau khi thấy được nhiều tẹp hỗ trợ chạy trong hệ điều hành chúng ta đi sâu vào để tìm ra key với lệnh
./volatility -f cridex.vmem profile=winxpSP2x86 printkey -K "Sofware\Microsoft\Windows\CurrentVersion\Run"
Hình ảnh 28 Hình ảnh lấy được key từ tệpThực sự key mã độc được chạy ngầm trên máy nạn nhân có tên là Robert khi khởi động máy là KB00207877.exe