Thứ Bảy, 17 tháng 5, 2014

[File System Forensics]Công nghệ đĩa cứng

Đây là bài dịch trong cuốn File System Analysis

Nếu một digital investigator chỉ có thể học được một bộ phận phần cứng nào đó của máy tính, các đĩa cứng có thể là một lựa chon tốt nhất cho anh ta bởi vì các đĩa cứng là một trong những nguồn tài nguyên phổ biến dùng làm chứng cứ số. Trong phần này chúng ta sẽ thảo luận những điều cơ bản về đĩa cứng cũng như là những chủ đề được quan tâm bởi một investigator, ví dụ như là các phương thức truy xuất, write blocking, và những vị trí mà dữ liệu có thể ẩn được. Phần đầu tiên là một overview về cách một đĩa (disk) làm việc, và 2 phần tiếp theo sẽ đề cập tới các đĩa AT Attachment (ATA/IDE) và các đĩa Small Computer Systems Interface (SCSI).

Hình dạng đĩa cứng (Hard Disk Geometry) và ruột của nó (internals)

Ta cùng bắt đầu xem xét internals của tất cả các đĩa cứng hiện đại. Thông tin tìm được sẽ giúp ích cho ta khi tìm hiểu về cách dữ liệu được lưu và bởi vì các file systems cũ hơn và các cơ chế partitioning sử dụng hình dạng đĩa và các giá trị internal khác ẩn đi với các đĩa hiện đại. Do đó, biết về hình dạng đĩa sẽ giúp bạn hiểu một vài giá trị trong một file system. Mục đích của phần này không phải là giúp bạn sửa các đĩa cứng. Thay vào đó, mục đích là giúp bạn hiểu được các khái niệm cơ bản về những gì đang diễn ra phía bên trong.

Các đĩa cứng chứa một hay nhiều đĩa cứng hình tròn và được chồng lên nhau và tại quay cùng một thời điểm. Hình ảnh bên trong một đĩa có thể thấy phía bên dưới.
 
Hình 1 Phía bên trong của một ATA disk, bạn có thể thấy các đĩa phía bên phải và một cánh tay phía bên trái để đọc và ghi lên các đĩa



Đỉnh và đáy của mỗi đĩa được phủ lớp từ, và khi đĩa được sản xuất, các đĩa hoàn toàn trống rỗng.
Bên trong đĩa là một cánh tay (arm) di chuyển qua lại, và nó có một cái đầu (head) có thể đọc và ghi tại một thời điểm.

Một định dạng cấp độ thấp hơn được thực hiện trên các đĩa trống để tạo các cấu trúc dữ liệu cho các tracks và các sectors. Một track là một vòng tròn (circular ring) đi xung quanh đĩa. Mỗi track trên đĩa cứng có được một địa chỉ từ phía bên ngoài vào trong, bắt đầu từ 0. Ví dụ, nếu có 10,000 tracks trên mỗi đĩa, track phía bên ngoài của mỗi đĩa có thể là 0, và track phía bên trong (vòng tròn gần trung tâm nhất) có thể là 9,999. Bởi vì layout của mỗi đĩa là giống nhau và các tracks trên mỗi đĩa là địa chỉ giống nhau cho trước, thuật ngữ cylinder được sử dụng để mô tả tất cả các tracks tại một địa chỉ cho trước trên tất cả các đĩa. Ví dụ, cylinder 0 là track 0 trên đáy và đỉnh của tất cả các đĩa trong đĩa cứng. Các heads trong đĩa được cho một địa chỉ vì vậy chúng ta có thể nhận dạng duy nhất là đĩa nào và trên mặt nào của đĩa mà chúng ta muốn đọc hay ghi.

Mỗi track được chia thành các sectors, sector là đơn vị lưu trữ có thể đánh địa chỉ nhỏ nhất trong đĩa cứng và thường là 512 bytes. Mỗi sector được gán một địa chỉ, bắt đầu từ một cho mỗi track. Do đó, chúng ta có thể có được địa chỉ của một sector thông qua việc sử dụng cylinder address (C) để có được track, head number (H) để có được đĩa và phía (side), và sector address (S) để lấy được sector trong track. Bạn có thể nhìn hình 2 phía dưới.
 
 
Hình 2. Hình dạng đĩa của một platter chỉ ra track (hoặc cylinder) và sector addresses
 
 
Chúng ta sẽ thảo luận trong phần "Các kiểu địa chỉ của Sector" liên quan đến vấn đề địa chỉ CHS không còn được sử dụng như là phương thức đánh địa chỉ chính nữa. Logical Block Address (LBA) được sử dụng thay thế, và nó gán các địa chỉ có thứ tự cho mỗi sector. Địa chỉ LBA không có liên quan tới vị trí vật lý của nó.
 
Một sector có thể bị lỗi và do đó không còn được sử dụng để lưu trữ dữ liệu người dùng. Với các đĩa cũ hơn, trách nhiệm của hệ điều hành là biết vị trí của các bad sectors và không cấp phát các sectors này cho các files. Người dùng cũng có thể nói một cách thủ công cho đĩa biết các sectors nào cần lờ đi bởi vì chúng bị lỗi. Nhưng việc làm như vậy là không cần thiết, bởi vì các đĩa hiện đại có thể nhận dạng một bad sector và remap địa chỉ này tới một vị trí tốt ở một nơi nào đó trên đĩa. Người dùng không bao giờ biết điều đó xảy ra.
 
Mô tả trước đây về layout được đơn giản hóa. Trong thực tế, đĩa sắp xếp vị trí của các sectors sao cho đạt được hiệu năng cao nhất. Vì vậy, các sectors và các tracks có thể được bù trừ để có được thuận lợi về seek times và tốc độ của drive.
 
ATA / IDE Interface
 
ATA Attachment (ATA) interface là một interface đĩa cứng phổ biến nhất. Các đĩa sử dụng interface này thường được nhắc tới như là các đĩa IDE , nhưng IDE là viết tắt của Integrated Disk Electronics và nhận dạng một đĩa cứng mà có logic board được tích hợp sẵn trong nó, những gì mà các đĩa cũ không có. Interface thực sự mà các đĩa "IDE"  sử dụng là ATA. Phần này chúng ta đi vào các chi tiết liên quan tới ATA vì vậy chúng ta thảo luận các công nghệ, ví dụ như hardware write blockers và host protected areas.
 
Các thông số kĩ thuật ATA được phát triển bởi T13 Technical Committee (http://www.t13.org). Phiên bản của mỗi chi tiết kĩ thuật là có tính phí, nhưng các phiên bản dự thảo thì free có trên INCITS web site. Đối với mục đích học tập các phiên bản dự thảo là đủ.
 
Các đĩa ATA yêu cầu một controller, những gì được tích hợp sẵn trong moderboard của các hệ thống hiện đại. Controller yêu cầu các commands đến một hoặc 2 đĩa ATA sử dụng một ribbon cable. Cable có độ dài tối đa là 18 inches và có 40 pins, nhưng các đĩa mới hơn có them 40 dây mà không được kết nối tới bất cứ pin nào.
 
Một channel  là một interface data path giữa controller và các đĩa. Mỗi channel có thể có 2 đĩa, các thuật ngữ "master" và "slave" có thể sử dụng để gọi chúng, mặc dù cả 2 không có điều khiển lẫn nhau. Các đĩa ATA có thể được cấu hình như là master hoặc là slave sử dụng một physical jumper trên đĩa. Một vài đĩa có thể được cấu hình sử dụng "Cable Select", nơi mà chúng sẽ được gán như là master hoặc slave dựa trên plug nào mà chúng được gán trên ribbon cable. Hầu hết khách hàng có 2 channels và có thể hỗ trợ 4 ATA disks.
 
Các kiểu địa chỉ Sector
Để đọc và ghi dữ liệu, chúng ta cần đánh địa chỉ các sectors. Một sector đơn lẻ (single sector) sẽ được gán một địa chỉ mới sau mỗi lần partition, file system, hoặc file sử dụng nó. Địa chỉ mà chúng ta đang nhắc tới trong phần này là địa chỉ vật lý của nó. Địa chỉ vật lý của một sector là địa chỉ tương đối của nó sao với điểm bắt đầu của thiết bị vật lý.
 
Có 2 phương thức đánh địa chỉ vật lý khác nhau. Các đĩa cứng cũ hơn sử dụng hình dạng đĩa và phương thức CHS. Trong hình 2 chúng ta đã có nhắc tới phương thức này cũng như cách các địa chỉ cylinder và head được tổ chức.
 
Phương thức CHS nghe có vẻ khá tốt, nhưng thực tế là nó quá giới hạn và không được sử dụng nhiều. Các thông số kĩ thuật ban đầu của ATA sử dụng giá trị cylinder 16 bit, và gía trị 4 bit head , và 8-bit giá trị sector, nhưng các BIOS cũ hơn sử dụng giá trị cylinder có 10 bit, giá trị head 8 bit và giá trị sector 6 bit. Do đó, để giao tiếp với đĩa cứng thông qua BIOS, kích thước nhỏ nhất cho mỗi giá trị phải được sử dụng, những gì chỉ cho phép đĩa 504 MB.
 
Để "work around" với giới hạn 504MB này, các BIOS mới được phát triển mà có thể chuyển đổi (translate) các dải địa chỉ mà chúng thích tới các địa chỉ theo chuẩn của ATA. Ví dụ, nếu ứng dụng yêu cầu dữ liệu từ cylinder 8, head 4, và sector 32, BIOS có thể chuyển đổi và yêu cầu cylinder 26, head 2, sector 32 từ đĩa. Để cho việc chuyển đổi được thực hiện, BIOS sẽ phải report một hình dạng đĩa cứng mà khác với hình dạng tồn tại thực sự trên đĩa. Qúa trình chuyển đổi này sẽ không hoạt động cho các đĩa có dung lượng lớn hơn 8.1GB.
 
Các BIOS mà thực hiện việc chuyển đổi địa chỉ không còn phổ biến nữa, nhưng một investigator có thể sẽ phải đối mặt với những hệ thống này. Nếu anh ta lấy đĩa ra khỏi hệ thống và đặt nó vào trong hệ thống của anh ta, việc chuyển đổi có thể sẽ khác hoặc có thể không tồn tại. Và việc thu hồi hay dead analysis có thể không thực hiện được bởi vì các sectors sai sẽ được trả về. Để giải quyết vấn đề này, một investigator cần sử dụng hệ thống ban đầu hoặc tìm một hệ thống tương tự mà thực hiện việc chuyển đổi giống như hệ thống ban đầu. Một investigator có thể xác định nếu một hệ thống thực hiện việc chuyển đổi thông qua việc tìm kiếm phiên bản BIOS trên website nhà sản xuất hoặc thông qua việc tìm kiếm các thông tin liên quan trong BIOS.
 
Để khắc phục giới hạn 8.1 GB liên quan với sự chuyển đổi. Chúng ta chuyển qua sử dụng Logical Block Address (LBA) . LBA sử dụng một số đơn, bắt đầu từ 0, để đánh địa chỉ mỗi sector và đã được hỗ trợ từ thông số kĩ thuật ATA đầu tiên. Với LBA, software không cần biết bất cứ thứ gì về hình dạng; nó chỉ cần biết một số đơn. Hỗ trợ cho các địa chỉ CHS đã bị loại bỏ từ thông số kĩ thuật ATA trong ATA-6.
 
Không may mắn thay, một vài file system và các cấu trúc dữ liệu khác vẫn còn sử dụng địa chỉ CHS, vì vậy chúng ta cần phải chuyển đổi CHS sang LBA. Địa chỉ LBA 0 là địa chỉ CHS 0, 0, 1 và địa chỉ LBA 1 là địa chỉ CHS 0, 0, 2. Khi tất cả các sectors trong track được sử dụng, sector đầu tiên tại head tiếp theo trong cùng cylinder được sử dụng, đó là địa chỉ CHS 0, 1, 1. Bạn có thể hình dung đó là việc làm đầy vòng phía bên ngoài của đĩa cuối cùng, sau đó di chuyển lên các đĩa phía trên cho đến khi đạt đến đĩa trên đỉnh. Giải thuật chuyển đổi là
LBA = (((CYLINDER * heads_per_cylinder) + HEAD) * sectors_per_track) + SECTOR - 1
Trong đó bạn thay thế CYLINDER, HEAD, và SECTOR với các giá địa chỉ CHS tương ứng. Ví dụ, xét một đĩa mà có 16 heads trên một cylinder và 63 sectors trên một track. Nếu chúng ta có một địa chỉ CHS là cylinder 2, head 3, và sector 4, việc chuyển đổi qua LBA diễn ra như sau:
2208 = (((2 * 16) + 3) * 63) + 4 - 1
 
Các chuẩn Interface
Có rất nhiều thuật ngữ interface trong lĩnh vực đĩa cứng khách hàng, điều này có thể gây ra một chút nhầm lẫn. Một vài thuật ngữ có ý nghĩa giống nhau, thuật ngữ này dựa trên các tiêu chuẩn, thuật ngữ kia là do các công ty phần cứng đặt. Nói chung, các chuẩn mới thêm vào phương thức đọc và ghi nhanh hơn hoặc là chỉnh sửa các giới hạn về kích thước của các chuẩn phía trước.
 
Chú ý rằng các thông số kĩ thuật ATA chỉ áp dụng với các đĩa cứng. Removable media, ví dụ như CD-ROMs và ZIP disks, cần sử dụng một thông số kĩ thuật đặc biệt, được gọi là AT Attachment Packet Interface (ATAPI).  Các thiết bị ATAPI sử dụng các cables và controller giống nhau, nhưng chúng yêu cầu các drivers đặc biệt.
 
Đây là một vài thông số kĩ thuật đáng chú ý và giúp ích cho investigation:
  • ATA-1: Được công bố năm 1994. Thông số kĩ thuật này hỗ trợ CHS và 28-bit địa chỉ LBA.
  • ATA-3: Được công bố năm 1997 và được thêm vào các tính năng khả tín và bảo mật. Seft-Monitoring Analysis and Reporting Technology (SMART) được đưa ra, đây là công nghệ mà cố gắng tăng cường tính khả tín thông qua việc giám sát một vài phần của đĩa. Passwords cũng được đưa ra trong tiêu chuẩn này.
  • ATA/ATAPI-4: ATAPI, thông số kĩ thuật cho removable media, được tích hợp vào trong thông số kĩ thuật ATA trong ATA-4, được đưa ra vào năm 1998. Cable 80-dây được đưa ra để giúp giảm nhiễu. ATA-4 thêm vào HPA.
  • ATA/ATAPI-6: được đưa ra vào năm 2002, thêm vào các địa chỉ LBA 48-bit, loại bỏ hỗ trợ các địa chỉ CHS, thêm vào DCO
  • ATA/ATAPI-7: thông số kĩ thuật này vẫn còn là dạng bản thảo. Bản thảo này bao gồm serial ATA.
Disk Commands
Phần này cung cấp một overview về cách controller và đĩa cứng giao tiếp, điều này giúp ta khi thảo luận về hardware write protectors. Phần này không áp dụng cho các thiết bị ATAPI, ví dụ như CD-ROMs.
Controller phát ra các commands tới đĩa cứng thông qua ribbon cable. Các commands được phát tới cả hai đĩa trên cable, nhưng có một phần của command được dùng để nhận dạng nêú nó là master hay là slave. Controller giao tiếp với các đĩa cứng thong qua việc ghi vào các thanh ghi của nó, các thanh ghi này là những đoạn của bộ nhớ (pieces of memory). Các thanh ghi làm việc giống như một online order form ở đó controller ghi dữ liệu vào trong các thanh ghi giống như việc bạn điền dữ liệu vào trong các mục của form. Khi tất cả dữ liệu cần thiết đã được ghi vào các thanh ghi, controller ghi vào command register, và đĩa cứng xử lý command. Theo nguyên tắc, đĩa không làm bất cứ thứ gì cho đến khi command registẻ được ghi.
 
Ví dụ, xét tình huống mà ở đó controller muốn đọc một sector của đĩa. Nó có thể ghi địa chỉ sector và số lượng sector cần đọc trong các thanh ghi thích hợp. Sau khi các chi tiết command được ghi vào các thanh ghi, controller hướng dẫn (instruct) đĩa cứng thực thi hành động đọc thông qua việc ghi vào thanh ghi command.
 
Hard Disk Passwords
Thông số kĩ thuật ATA-3 đề ra các tính năng bảo mật lựa chọn mới, bao gồm passwords mà có thể được set thông qua BIOS hoặc các ứng dụng phần mềm khác nhau. Nếu triển khai, có 2 passwords trong các đĩa cứng, user và master passwords. Master password được thiết kế do đó quản trị viên công ty có thể truy cập vào máy tính trong trường hợp user password bị mất. Nếu các passwords được sử dụng, có 2 chế độ (modes) mà đĩa có thể hoạt động: cao (high) và cực đại (maximum). Trong chế độ bảo mật cao, user password có thể mở khóa (unlock) đĩa nhưng master password chỉ có thể unlock đĩa sau khi nội dung của đĩa bị xóa. Sau một số lần cố gắng đăng nhập password thất bại, đĩa sẽ đóng băng (freeze), và hệ thống sẽ cần phải rebooted.
 
Đĩa cứng sẽ yêu cầu SECURITY_UNCLOCK command được thực thi với password chính xác trước khi nhiều ATA command có thể được thực thi. Sau khi password đúng được nhập, đĩa hoạt động bình thường cho đến khi đĩa được tăt nguồn.
 
Một vài ATA commands vẫn được enabled trên đĩa cứng khi nó bị khóa, vì vậy nó có thể xuất hiện như là một đĩa hợp lệ khi được đưa vào máy tính. Tuy nhiên, khi bạn cố gắng đọc dữ liệu thực sự của user từ một đĩa bị khóa, nó sẽ hoặc sinh ra lỗi hoặc yêu cầu password. Có một vài chương trình miễn phí trên mạng sẽ cho bạn biết đĩa có bị khóa và sẽ cho phép bạn unlock nó với password. Có 2 chương trình đó là atapwd và hdunlock. Password có thể được set thông qua BIOS hoặc thông qua các ứng dụng phần mềm khác nhau. Một vài công ty khôi phục dữ liệu có thể bypass password thông qua việc mở đĩa.
 
Host Protected Area
Host Protected Area (HPA) là một vùng đặc biệt của đĩa có thể được sử dụng để lưu dữ liệu, và với cặp mắt quan sát bình thường sẽ không thấy nó. Kích thước của vùng này có thể được cấu hình sử dụng ATA commands, và nhiều đĩa mặc định kích thước là 0.
 
HPA được bổ sung trong ATA-4, và động lực để thực hiện đó là các nhà sãn xuất máy tính có thể lưu dữ liệu mà mà không thể bị xóa khi một user format và xóa nội dung đĩa cứng. HPA nằm ở cuối của đĩa và, khi được sử dụng, có thể chỉ được truy nhập thông qua việc cấu hình lại đĩa cứng.
 
Nào hãy cùng đi vào chi tiết hơn về HPA thông qua việc sử dụng ATA commands. Một vài trong số các commands tôi sẽ sử dụng có 2 versions phụ thuộc vào kích thước của đĩa, nhưng ta sẽ chỉ sử dụng một trong số chúng. Có 2 commands mà trả về các giá trị sector có thể đánh địa chỉ cực đại (maximum addressable sectors values), và nếu một HPA tồn tại kết quả trả về của chúng sẽ khác nhau. READ_NATIVE_MAX_ADDRESS command trả về địa chỉ vật lý tối đa, nhưng IDENTIFY_DEVICE command sẽ chỉ trả về số lượng các sectors mà user có thể truy xuất đến. Do đó, nếu một HPA tồn tại, READ_NATIVE_MAX_ADDRESS sẽ trả về kết thúc thật sự của đĩa và IDENTIFY_DEVICE command sẽ trả về kết thúc của vùng user (và bắt đầu của HPA). Chú ý phần trình bày tiếp theo sẽ chỉ ra rằng  READ_NATIVE_MAX_ADDRESS không thường xuyên trả về địa chỉ vật lý cuối cùng của đĩa.
 
Để tạo một HPA, SET_MAX_ADDRESS command được sử dụng để set địa chỉ tối đa tới những gì user có thể truy xuất. Để loại bỏ HPA, SET_MAX_ADDRESS  phải được thực thi một lần nữa với kích thước thực sự của đĩa, thông tin này có thể tìm thấy thông qua sử dụng command READ_NATIVE_MAX_ADDRESS.
 
Ví dụ, nếu có một đĩa 20GB,  READ_NATIVE_MAX_ADDRESS sẽ trả về một sector count của 20GB (ví dụ là 41,943,040). Để tạo 1GB host protected area, chúng ta thực thi SET_MAX_ADDRESS với một địa chỉ 39,845,888 . Bất cứ một cố gắng nào để đọc hay ghi dữ liệu tới 2,097,152 sectors cuối cùng sẽ sinh ra lỗi, và IDENTIFY_DEVICE command sẽ trả về một địa chỉ cực đại 39,845,888. Chúng ta có thể nhìn vào hình phía dưới. Để loại bỏ HPA, chúng ta có thể set SET_MAX_ADDRESS với full sector count.
                                      Hình 3: 1 GB HPA trong 20GB đĩa
 
Một trong các thiết lập của SET_MAX_ADDRESS command là một 'volatility' bit, khi được set, làm cho HPA tồn tại sau khi đĩa cứng được reset hoặc power cycled. Cũng có một tập hợp của các locking commands trong thông số kĩ thuật ATA mà ngăn cản các sự thay đổi tới địa chỉ tối đa cho đến lần reset tiếp theo. Nó cho phép BIOS đọc và ghi một vài dữ liệu trong host protected area khi hệ thống được powered up, set HPA như vậy thì user không thể nhìn thấy dữ liệu, và lock vùng này lại vì thế nó không thể bị thay đổi. Thậm chí một password có thể được sử dụng (password này khác với password được sử dụng cho việc truy xuất đĩa.)
 
Tổng kết lại, một đĩa cứng có thể có một HPA chứa các system files, thông tin ẩn, hoặc cả hai. Có phát hiện sự tồn tại của HPA thông qua việc so sánh 2 ATA commands. Để loại bỏ nó, địa chỉ tối đa của đĩa cứng phải được reset, nhưng thiết lập volatility cho phép thay đổi tạm thời.  
                           
 Device Configuration Overlay
 Dữ liệu ngoài được ẩn trong một HPA, dữ liệu có thể được ẩn sử dụng Device Configuration Overlay (DCO) . DCO được bổ sung vào ATA-6 và cho phép giới hạn khả năng của đĩa cứng. Mỗi thông số kĩ thuật ATA có các đặc tính lựa chọn mà một đĩa có thể hay không triển khai. Máy tính sử dụng sử dụng IDENTIFY_DEVICE command để xác định các đặc tính nào mà một đĩa cứng có thể hỗ trợ. Một DCO có thể làm cho IDENTIFY_DEVICE command hiển thị các đặc tính được hỗ trợ mà không được hỗ trợ và hiển thị một kích thước đĩa nhỏ hơn những gì chúng có.
 
Hãy cùng nhìn vào một vài DCO commands. DEVICE_CONFIGURATION_IDENTIFY command trả về các đặc tính thực sự và kích thước của một đĩa. Do đó, chúng ta có thể phát hiện một DCO thông qua việc so sánh các outputs của DEVICE_CONFIGURATION_IDENTIFY và IDENTIFY_DEVICE. Hơn nữa, nhắc lại READ_NATIVE_MAX_ADDRESS command trả về kích thước của đĩa sau một HPA. Chúng ta có thể phát hiện một DCO mà ẩn các sectors thông qua việc so sánh output của READ_NATIVE_MAX_ADDRESS với DEVICE_CONFIGURATION_IDENTIFY.
 
Ví dụ, xét một đĩa 20GB ở đó một DCO có địa chỉ tối đa được set tới 19GB. READ_NATIVE_MAX_ADDRESS và IDENTIFY_DEVICE hiển thị đĩa chỉ có 19GB. Nếu 1GB HPA cũng được tạo, IDENTIFY_DEVICE command hiển thị kích thước của đĩa là 18GB. Chúng ta có thể nhìn thấy trong hình dưới đây:
Hình 4. Một DCO có thể ẩn các sectors ở phần cuối của đĩa, ngoài việc ẩn các sectors thông qua HPA
 

Để tạo hoặc thay đổi một DCO, DEVICE_CONFIGURATION_SET command được sử dụng. Để loại bỏ một DCO, DEVICE_CONFIGURATION_RESET command được sử dụng. Không giống như HPA, không có lựa chọn biến động (volatile option) mà cho phép thiết bị thay đổi các thiết lập cho một phiên. Tất cả các thay đổi DCO là vĩnh viễn thông qua resets và power cycles.

Serial ATA
Làm việc với các thiết bị ATA có những bất lợi của nó. Các cables quá lớn, không mềm dẻo, và có các connectors ở những nơi mà bạn thường xuyên không muốn chúng ở đó. Các đĩa cứng còn có thể khó khăn để cấu hình với master và slave jumpers. Cable và tốc độ của interface là một vài động lực ẩn sau việc phát triển Serial ATA, những gì bao gồm trong thông số kĩ thuật ATA-7.

Interface được gọi là serial bởi vì chỉ một bit thông tin được vận chuyển giữa controller và đĩa cứng ở một thời điểm, khi so sánh với 16 bits tại một thời điểm với interface ban đầu, hoặc parallel ÂTA. Các serial ATA connectors bằng 1/4 so với kích thước của parallel ATA connectors và chúng chỉ có 7 contacts. Mỗi thiết bị serial ATA được kết nối trực tiếp tới controller, và không có sự móc nối của các thiết bị.

Serial ATA được thiết kế mà một controller mới có thể được đặt trong một máy tính, và máy tính không biết gì về sự khác biệt giữa ATA ban đầu (parallel ATA ) và serial ATA mới. Thực tế, serial ATA controller có các registers mà làm cho máy tính nghĩ rằng nó đang nói chuyện với một đĩa parallel ATA. Host computer coi mỗi đĩa được kết nối tới serial ATA controller như là một đĩa master trên channel của nó.

BIOS và Truy cập trực tiếp
Chúng ta đã thảo luận về cách các đĩa cứng ATA làm việc và cách chúng được điều khiển, chúng ta cần thảo luận về cách phần mềm giao tiếp với chúng bởi vì điều này có thể tạo ra các vấn đề khi muốn thu thập dữ lieu trên đĩa. Có 2 phương thức mà phần mềm có thể sử dụng để truy cập đĩa: trực tiếp thông qua hard disk controller hoặc thông qua BIOS.

Truy cập trực tiếp đến Controller
Chúng ta đã thấy trong phần trước là đĩa cứng được kết nối tới một hard disk controller, là một thành phần phát đi các commands tới đĩa cứng sử dụng ribbon cable. Một kĩ thuật cho việc đọc và ghi dữ liệu là cho phần mềm giao tiếp trực tiếp với hard disk controller, những gì sau đó giao tiếp với đĩa cứng.

Để giao tiếp theo cách này, phần mềm cần biết cách address controller và cách phát các commands tới nó. Ví dụ, phần mềm cần biết command code cho hành động đọc là gì, và nó cần biết cách nhận dạng các sectors nào cần đọc. Phần mềm sẽ còn phải query đĩa cứng để có được các chi tiết như kiểu và kích cỡ.

Truy cập BIOS tới Controller
Truy cập đĩa cứng trực tiếp là cách nhanh nhất để có được dữ liệu từ đĩa, nhưng nó yêu cầu phần mềm phải biết chút ít về phần cứng. Một trong các công việc của BIOS là ngăn cho phần mềm phải biết các chi tiết này. BIOS biết về hardware, và nó cung cấp các dịch vụ tới phần mềm vì vậy chúng có thể giao tiếp dễ dàng với hardware.

Nhắc lại phần "Boot Code Locations" mà BIOS được sử dụng khi máy tính khởi động. BIOS thực hiện nhiều công việc trong quá trình boot, nhưng có 2 công việc cần nhắc tới khi thảo luận ở đây. Công việc liên quan thứ nhất là việc nó xác định chi tiết của các đĩa đã được cài đặt hiện hành. Công việc liên quan thứ 2 đó là nó nạp bảng ngắt (interrupt table), bảng này được dùng để cung cấp dịch vụ tới hệ điều hành và phần mềm.

Để sử dụng các dịch vụ đĩa cứng BIOS, phần mềm phải nạp dữ liệu, ví dụ như địa chỉ sector hoặc các kichs thước, vào trong các thanh ghi CPU và thực thi software interrupt command 0x13 (thường được gọi là INT13h). Software interrupt command làm cho processor nhìn vào bảng ngắt và định vị được code mà sẽ xử lý yêu cầu dịch vụ. Table entry cho interrupt 0x13 chứa địa chỉ của BIOS code mà sẽ sử dụng kiến thức của nó để giao tiếp với controller. Về cơ bản, BIOS làm việc như người đứng giữa phần mềm và phần cứng.

INT13h thực sự là một dạng của các hàm đĩa (disk funtions) và bao gồm các hàm mà ghi lên đĩa, đọc từ đĩa, format các tracks trên đĩa, và query đĩa để lấy thông tin. Các hàm INT13h nguyên thủy cho việc đọc và ghi sử dụng các địa chỉ CHS và cho phép phần mềm truy cập một đĩa mà chỉ có 8.1GB hoặc ít hơn. Để khắc phục giới hạn này, các tính năng mới được thêm vào INT13h trong BIOS, được gọi là "extended INT13h."

Các hàm INT13h mở rộng yêu cầu BIOS code mới và sử dụng đĩa chỉ LBA 64-bit. Vì các lý do tương thích, các hàm CHS vẫn được duy trì, và phần mềm phải được viết lại để có thể sử dụng được các tính năng mới.

SCSI Drives
Phần này cung cấp một overview về SCSI, tập trung vào các kiểu khác nhau, và mô tả nó khác với ATA như thế nào. Các đĩa cứng SCSI không phổ biến bằng ATA trên các máy tính người dùng, nhưng nó là chuẩn trên hầu hết servers.

Giống như ATA, có nhiều thông số kĩ thuật của SCSI, các tiêu chuẩn này được công bố bởi T10 Technical Committee. Có 3 thông số kĩ thuật SCSI, SCSI-1, SCSI-2, SCSI-3. SCSI-3 thực sự bao gồm nhiều thông số kĩ thuật nhỏ hơn.

SCSI versus ATA
Có những sự khác biệt ở cả mức cao và mức thấp giữa SCSI và ATA. Các sự khác biệt cấp cao rõ ràng nhất đó là nhiều kiểu connector. Với ATA, chỉ có các connectors 40 và 44-pin, nhưng SCSI có nhiều hình dạng và kiểu dáng. SCSI cables có thể dài hơn ATA cables và có thể có nhiều hơn 2 thiết bị trên cùng một cable. Mỗi thiết bị trên SCSI cable cần một số ID duy nhất, số này có thể được cấu hình với các jumpers trên đĩa hoặc với phần mềm. Nhiều đĩa SCSI cũng có một jumper để làm cho đĩa chỉ đọc (read only), tính năng này giống như ATA write blocker. Các ATA write blockers là các thiết bị bên ngoài mà block các write commands.

Sự khác biệt mức thấp đầu tiên giữa ATA và SCSI đó là SCSI không có một controller. ATA interface đã được thiết kế để cho một single controller nói cho một hoặc hai đĩa cứng những gì cần làm. SCSI đã được thiết kế như là một bus ở đó các thiết bị khác nhau giao tiếp lẫn nhau và các thiết bị không bị giới hạn tới các đĩa cứng. Với một cấu hình SCSI, card mà được gắn vào trong máy tính không phải là một controller bởi vì mỗi thiết bị trên SCSI cable là có vai trò như nhau và có thể tạo ra các requests lẫn nhau.

Giống như ATA, SCSI chuẩn là parallel và dữ liệu di chuyển theo các khối 8-bit và 16-bit. Còn nữa, SCSI giống ATA ở chỗ nó cũng có một phiên bản serial, nó được xác định trong thông số kĩ thuật serial attached SCSI.

Các kiểu SCSI
Sự khác nhau giữa các phiên bản SCSI tóm lại ở chỗ có bao nhiêu bit được truyền đi tại một thời điểm, tần số của các tín hiệu trên cable (tốc độ của vận chuyển), và các kiểu tín hiệu được sử dung. Các kiểu SCSI cũ hơn có một phiên bản bình thường (normal version) và một phiên bản mở rộng (wide version), ở đó phiên bản bình thường vận chuyển 8 bits tại một thời điểm và phiên bản mở rộng vận chuyển 16 bits tại một thời điểm. Ví dụ, một thiết bị Ultra SCSI thực hiện một việc vận chuyển 8-bit và một thiết bị Wide Ultra SCSI thực hiện việc vận chuyển 16-bit, không cần đưa ra sự khác biệt giữa phiên bản bình thường và mở rộng.

Sự khác biệt thứ 2 trong các phiên bản SCSI đó là tốc độ của các tín hiệu trong cable. Bảng phía dưới đây đưa ra tên của các kiểu SCSI, tốc độ, và tỉ lệ vận chuyển đối với bus 8-bit bình thường và bus 16-bit mở rộng.

Bảng 1. Tốc độ khác biệt giữa các kiểu SCSI khác nhau


Bên trong mỗi kiểu này, có những cách khác nhau mà dữ liệu được biểu trên dây (wire). Cách thức rõ ràng nhất là single ended (SE) , theo cách thức này một điện áp cao được đặt trên dây nếu 1 được vận chuyển và không có điện áp được đặt trên dây nếu 0 được vận chuyển. Phương thức này tạo ra một vấn đề tại các tốc độ cao và với các cable dài hơn bởi vì tín hiệu điện không thể ổn định tại tốc độ cao và các dây có thể làm nhiễu sóng những dây khác.

Phương thức thứ 2 để vận chuyển dữ liệu được gọi là differential voltage, và mỗi bit thực sự yêu cầu 2 dây. Nếu một bit 0 được vận chuyển, không có điện áp được áp dụng cho cả 2 dây. Nếu một bit 1 được vận chuyển, một điện áp dương được áp dụng cho một dây và điện áp ngược được áp dụng cho dây thứ 2. Khi một thiết bị đọc các tín hiệu từ cable, nó có được sự khác biệt giữa 2 dây. Một lựa chon tín hiệu high voltage differential (HVD) tồn tại trong SCSI từ phiên bản đầu tiên và một lựa chọn tín hiệu low voltage differential (LVD) sử dụng một tín hiệu nhỏ hơn, tồn tại từ Ultra2 SCSI, và là kiểu tín hiệu chính cho các đĩa mới. Bảng phía dưới chỉ ra các kiểu SCSI mà sử dụng các kiểu tín hiệu khác nhau.

Bảng 2. Các kiểu tín hiệu mà có thể tìm thấy trong mỗi kiểu SCSI

Điều quan trọng đó là bạn không trộn (mix) các kiểu tín hiệu khác nhau. Bạn có thể gây ra các đe dọa cho các thiết bị của bạn khi bạn kết nối các thiết bị SE tới các thiết bị HVD và một vài thiết bị LVD. Một vài đĩa LVD tương thích với SE, vì vậy chúng có thể được sử dụng trong môi trường SE mà không gây ra mối đe dọa nào, nhưng chúng chỉ hoạt động tại các tốc độ mà các thiết bị SE sử dụng. Có một vài biểu tượng trên các thiết bị SCSI mà nhận dạng kiểu tín hiệu chúng sử dụng. Đảm bảo rằng tất cả các thiết bị có cùng một biểu tượng hoặc là các biểu tượng tương thích. Các biểu thực được biểu diễn qua hình dưới.

Hình 5. Các biểu tượng của các kiểu tín hiệu SCSI. (A) là các thiết bị SE, (B) là các thiết bị LVD, (C) là các thiết bị cho cả SE và LVD tương thích, và (D) là các thiết bị HVD.


 Các kiểu Connector
Có nhiều kiểu SCSI connectors, nhưng chỉ có một vài kiểu mà chúng ta thường xuyên gặp. Nói chung, các drives có một bus 8-bit có một cable 50-pin, và cũng có các drives có một bus 16-bit có cable 68-bit. Adaptor 68-bit mật độ cao (high-density 68-bit adaptor) là cái được sử dụng phổ biến nhất, và nó có kích thước bình thường và kích thước mật độ rất cao, nhưng kích thước bình thường là phổ biến nhất và có thể thấy trong hình phía dưới đây. Adaptor 68-bit được sử dụng cho cả các tín hiệu LVD và SE, nhưng cable vật lý cho các kiểu tín hiệu khác nhau là khác nhau. Kiểm tra thông tin trên cable để ngăn các vấn đề này.
 
Hình 6. Một điã SCSI với một adaptor 68-pin
Một biến thể khác của connector 68-pin mật độ cao là Single Connector Attachment (SCA) connector. Mục đích của connector này là cung cấp power và các dây dữ liệu trong một connector, điều này có thể giúp dễ dàng swap các drives trong một server. Connector này có 80 pins và bao gồm các pins cho power và để cấu hình đĩa. Một bức hình cho loại connector này các bạn có thể thấy ở phía dưới
 
 Hình 7. Một đĩa SCSI với một SCA connector


Có nhiều adaptors cho các kiểu SCSI connectors khác nhau, và các thiết bị SCSI được giả định với sự tương thức ngược. Tuy nhiên, không phải tất cả adaptor và các cấu hình thiết bị có thể làm việc. Nếu thiết lập làm việc, nó sẽ run với tốc độ của thiết bị thấp nhất. Hãy nhớ rằng đừng trộn bất cứ thiết bị HVD với các thiết bị LVD và SE mà không có các thiết bị adaptors hợp lý và chỉ trộn các thiết bị LVD và SE nếu các thiết bị LVD có thể run trong chế độ SE.
 
Size Barriers
Các đĩa SCSI không phải chịu các giới hạn về kích thước như các đĩa ATA bởi vì thông số kĩ thuật SCSI thường xuyên sử dụng các địa chỉ LBA 32-bit và 64-bit. Mặc dù, giới hạn kích thước của BIOS (nếu bạn đang sử dụng INT13h) hoặc file system có thể nhỏ hơn những gì SCSI hỗ trợ, và chúng sẽ là nhân tố giơí hạn.
 
Khi sử dụng thông qua BIOS, SCSI controller chuyển đổi (translate) một địa chỉ CHS sang một địa chỉ LBA. Các controller khác nhau có thể sử dụng các kĩ thuật ánh xạ khác nhau, nhưng nhiều trong số chúng chọn một kĩ thuật dựa trên hình dạng được mô tả bởi các entries trong một bảng partition. Có thể cho một investigator có một controller trong hệ thống thu hồi của anh ta mà không tiến hành một ánh xạ tương tự như controller ban đầu, vì vậy đĩa cần được yêu cầu sử dụng truy cập trực tiếp và không sử dụng BIOS.  

Thứ Bảy, 26 tháng 4, 2014

4 năm nhìn lại!

Bữa nào chán học là lại có tâm trạng muốn lảm nhảm :)
2010-2014 sắp đi hết chặng đường đại học. Thời gian trôi nhanh, như mới ngay đây thôi còn là một con người chập chững những bước đầu sau 12 năm đèn sách. Giờ đây là 22 tuổi, là sinh viên năm cuối, sắp ra trường và đang chuẩn bị bước vào những thử thách căng go.
Suốt 4 năm, nhiều sự việc xảy ra, có những điều tạm hài lòng cũng như những điều hối tiếc. Hãy nói về những điều hối tiếc trước. Có thể hối tiếc lớn đó là chưa được hưởng cảm giác ở kí túc xá. Nhiều chuyện vui được nghe kể lại mà cứ muốn mình là người trong cuộc một lần. Điều hài lòng trong suốt 4 năm là trong mình luôn duy trì được sự cố gắng, luôn nỗ lực dù đôi khi vẫn có sự hoang mang về con đường mình chọn, và tính cách thiếu cẩn thận liệu có phù hợp với ngành nghề theo đuổi. Bốn năm ở trường đối với mình vẫn là những ngày tháng ý nghĩa, có bạn bè, có những buổi chiều chạy bộ, đá banh, có những buổi đi chơi xa. Những kỉ niệm về chuyến phượt của 6 thằng gần 600 cây, leo 2 cái ngọn núi.Về chuyến đi chơi xa với lớp mà chắc sẽ khó có thể nào quên. Nhiều lúc muốn tua lại về những khoảng thời gian ấy để sống lại những năm tháng ấy một lần nữa. Năm 4 cái năm quyết định có thể nói là như vậy phía trước là đợt thực tập, tốt nghiệp, may mắn ra được trường thì phía trước vẫn là một chặng đường, có những tia sáng, nhưng cũng có sự chông gai đang chờ đợi.
Sẽ không thể quên những tuyến xe buýt, những lần ngủ gật trên xe buýt :D, những lúc đi học về trên xe buýt vào buổi tối được ngắm được phố những trải nghiệm đó phải nói là tuyệt. Nhiều lúc chẳng biết đường xá vì cái tội đi xe buýt nhiều. Nhớ những bữa nhậu nhẹt cùng đám bạn, những bữa nhậu bắt đầu từ năm nhất khi chỉ vì thích hay là vì thằng bạn thất tình rủ nhậu, nói chung là vui vẻ và gắn kết anh em rất nhiều :). Những buổi chiều chạy bộ ở sân trường là những lần không thể quên, mỗi chiều là một sự hào hứng khi được chạy bộ, ở đó có thể 8 chuyện tào lào với mấy thằng bạn, khi là chuyện học hành, lúc là chuyện hát hò, guitar... những buổi đá banh trên sân cờ có lúc đến rát cả chân mà vẫn đá. Tất cả dù nhiều hay it, không theo trình tự tất cả đã được xắp lại trong trí nhớ, chỉ trong năm nay thôi là phải chia tay thời sinh viên, chia tay bạn bè, mái trường... Sẽ vẫn luôn nhớ.

Thứ Năm, 17 tháng 4, 2014

Love is Sharing: Windows XP Boot Process

Love is Sharing: Windows XP Boot Process: Sau đây mình sẽ mô tả tiến trình boot trong Windows XP Sau khi đã được cấp nguồn điện, một máy tính chạy Windows XP sẽ thực hiện các bước ...

Thứ Tư, 16 tháng 4, 2014

Windows XP Boot Process

Sau đây mình sẽ mô tả tiến trình boot trong Windows XP

Sau khi đã được cấp nguồn điện, một máy tính chạy Windows XP sẽ thực hiện các bước sau:
1. Nguồn cung cấp điện tự kiểm tra chính nó và gửi đi một tín hiệu năng lượng tốt (power-good signal) tới bộ vi xử lý
2. chip thời gian ngưng việc gửi cá tín hiệu reset tới bộ vi xử lý, cho phép CPU bắt đầu các hoạt động.
3. CPU nạp ROM BIOS bắt đầu tại địa chỉ bộ nhớ ROM FFFF:0000
4. ROM BIOS chứa một lệnh JMP (jmp) mà trỏ tới địa chỉ thực sự của ROM BIOS code.
5. ROM BIOS thực hiện các kiểm tra cơ bản trên phần cứng trung tâm để kiểm tra các chức năng cơ bản.
6. BIOS tìm kiếm các adapters cần thiết để nạp các ROM BIOS routines của riêng chúng
7. Startup BIOS routines quét qua các địa chỉ từ C000:0000 đến C780:0000 để tìm ra video ROM
8. ROM BIOS kiểm tra xem nếu đó là cold boot hay là một warm boot
9. Nếu đó là một cold boot, ROM BIOS thực thi trọn vẹn POST (power-on self-test). Nếu đó là một warm boot, phần kiểm tra bộ nhớ của POST bị tắt đi.
10. POST có thể bị chia ra thành 2 thành phần:

  • một video test khởi tạo video adapter
  • một video adapter kiểm tra video card và video memory, và hiển thị thông tin cấu hình hoặc bất cứ lỗi nào
11. BIOS xác định vị trí và đọc thông tin cấu hình được lưu trong CMOS.
12. BIOS phân tích đĩa để tìm master boot record (MBR)
13. Với một MBR hợp lệ được nạp vào trong bộ nhớ, BIOS chuyển quyền điều khiển của boot process tới partition loader code.
14. Partition loader, hoặc boot loader, phân tích partition table để tìm ra một partition active.
15. Partition loader sau đó tìm kiếm boot record trong mọi sector đầu tiên của partition đó. 
16. Boot record của active partition được kiểm tra để xem có boot signature hợp lệ hay không, nếu tìm thấy, boot sector code được thực thi như một chương trình
17. NTLDR, một file hệ thống ẩn trong thư mục root của system partition, điều khiển việc nạp Windows XP trong 4 chặng:
  • chặng khởi tạo boot-loader: NTLDR chuyển processor từ real mode sang protected mode, những gì đặt processor trong 32-bit memory mode và bật memory paging lên. Nó sau đó nạp các file system drivers thích hợp để cho phép NTLDR nạp các files từ một partition định dạng với bất cứ file systems nào được hỗ trợ bởi XP. Nếu file BOOT.INI được đặt trong thư mục root, NTLDR sẽ đọc nội dung của nó trong bộ nhớ. 
  • chọn lựa hệ điều hành: nếu BOOT.INI chứa các entries cho nhiều hơn một hệ điều hành, NTLDR sẽ dừng trình tự boot tại điểm này. Một user có thể nhấn F8 ở chặng này của thứ tự boot để hiển thị các tùy chọn boot
  • Phát hiện phần cứng: nếu OS được chọn là XP, NTLDR xác định vị trí và nạp chương trình NTDETECT.COM dựa trên DOS để thực hiện việc phát hiện phần cứng. Nếu máy tính này có nhiều hơn một hardware profile đã được định nghĩa trước, NTLDR sẽ dừng lại tại điểm này và hiển thị Hardware Profiles/Configuration Recovery menu. Sau khi người dùng chọn một cấu hình phần cứng, NTLDR bắt đầu nạp XP kernel (NTOSKRNL.EXE)
  • Chọn cấu hình: NTLDR bây giờ nạp các device drivers đã được đánh dấu như là boot devices. Sau khi nạp các drivers này, NTLDR từ bỏ quyền điều khiển tới các device drivers
18. NTOSKRNL đi qua 2 chặng trong quá trình boot của nó
  • Chặng 0: XP disable các ngắt trong suốt chặng 0 và enable chúng trước chặng 1.Tầng trừu tượng phần cứng (HAL) được gọi để chuẩn bị interrupt controller.
  • Chặng 1: Tất cả excutive subsystems được khởi tạo lại theo thứ tự sau:
    1. Object manager
    2. Executive
    3. Microkernel
    4. Security Reference Monitor
    5. Virtual Memory Manager
    6. Cache Manager
    7. Local Procedure Calls (LPCs)
    8. I/O Manager
    9. Process Manager
19. I/O Manager bắt đầu nạp tất cả system driver files
  • đầu tiên nó nạp boot devices
  • nó nối một danh sách các drivers được ưu tiên và cố gắng nạp mỗi driver lần lượt
  • nó khởi động Session Manager Subsystem (SMSS).
  • SMSS nạp win32k.sys device driver, những gì implement Win32 graphics subsystem.
20. Win32k.sys chuyển màn hình thành chế độ đồ họa
21. các services subsystem khởi động tất cả các services được đánh dấu như Auto Start
22. Mỗi khi tất cả các thiết bị và các dịch vụ được khởi động , boot được coi như là thành công , và cấu hình này được lưu vào như là cấu hình tốt nhất cuối cùng
23. file WINLOGON.EXE khởi động logon process. nó là một login manager file chịu trách nhiệm cho tất cả các thủ tục login và logout.
24. Local Security Authority (LSASS.EXE) process hiển thị hộp thoại logon.
 

Thứ Sáu, 4 tháng 4, 2014

[Computer Forensic] CD-ROM/DVD File Systems

Dữ liệu lưu trên CD-ROM/DVDs được chia thành 2 sectors. Các sectors này chứa cả dữ liệu người dùng (user data) lẫn các mã điều khiển lỗi (error detection codes). Users không cần phải lo lắng về những dữ liệu nào được lưu ở sector nào, nhưng users nên trang bị kiến thức về cấu trúc file trong CD-ROM/DVDs.

ISO 9660
ISO 9660 định nghĩa một file system cho CD-ROM/DVD media. Nó hướng đến việc hỗ trợ cho nhiều hệ điều hành khác nhau, ví dụ như Microsoft Windows, MAC OS, và UNIX, để cho phép trao đổi dữ liệu giữa nhiều hệ điều hành khác nhau.

ISO 9660 Specifications
Có một vùng được dự trữ với kích thước là 32,768 bytes nằm ở phần đầu của đĩa. Vùng lưu trữ này không được nhắc tới trong chuẩn ISO 9660, nhưng nó thường được sử dụng để lưu trữ các thông tin để boot hệ thống trên các các CD-ROM/DVDs có thể boot (bootable CD-ROM/DVDs  ).

Volume Descriptors Nằm ngay phía sau, một chuỗi volume descriptors mô tả chi tiết những nội dung và kiểu thông tin được lưu trên đĩa.
Một volume descriptor mô tả các thuộc tính của thông tin file system tên CD-ROM/DVDs cho trước. Nó được chia thành 2 phần: kiểu của volume descriptor và các thuộc tính của descriptor.
  Một volume descriptor được xây dựng theo cách mà nếu một chương trình đọc một disk không hiểu về một descriptor cụ thể nào, nó có thể bỏ qua descriptor đó cho đến khi nó tìm thấy một descriptor mà nó có thể nhận dạng, do vậy nó cho phép việc sử dụng nhiều kiểu thông tin trên một CD-ROM/DVDs. Còn nữa, nếu có một lỗi làm cho descriptor không thể đọc được, một bản sao dư thừa của một descriptor sẽ được sử dụng cho việc khôi phục lỗi.

Một đĩa theo chuẩn ISO 9660 chứa ít nhất một primary descriptor mô tả ISO 9660 file system và một terminating descriptor ám chỉ cuối của chuỗi descriptor. Joliet và UDF là những ví dụ của các file systems thêm vào nhiều descriptors tới chuỗi này.

Primary volume descriptor hoạt động giống như là superblock trên UNIX file system, cung cấp các chi tiết trên các vùng trên đĩa theo chuẩn ISO 9660. Chứa bên trong primary volume descriptor là root directory record mô tả vị trí của root directory. Directory entries được lưu bên trong vùng này. Root directory được lưu trữ như một mở rộng, hoặc một chuỗi tuần tự các sectors, mà chứa mỗi directory entries xuất hiện trong root. Ngoài ra, bởi vì ISO 9660 hoạt động thông qua việc phân chia CD-ROM/DVD thành các khối logic (logical blocks), kích thước của các blocks này được tìm thấy trong primary volume descriptor.

Trường đầu tiên trong một volume descriptor là volume descriptor type, nó có thể có các giá trị sau:

  • Number 0: volume descriptor là một boot record
  • Number 1: volume descriptor là một primary volume descriptor
  • Number 2: volume descriptor là một supplementary volume descriptor
  • Number 3: voluem descriptor là một volume partition descriptor
  • Number 255: volume descriptor là một volume descriptor set terminator
Trường thứ 2 được gọi là standard identifier và được set giá trị CD001 cho một CD-ROM theo chuẩn ISO 9660.
Một trường đáng chú ý khác đó là volume space size, trường naỳ chứa lượng dữ liệu trên CD-ROM
Các thuộc tính file rất đơn giản trong ISO 9660. Thuộc tính file quan trọng nhất xác định xem file đó là thư mục hay là file thông thường.

Có 2 cách để xác định vị trí một file trên một ISO 9660 file system
  • một là interpret các directory names và tìm trong thư mục đó có file cần tìm hay không
  • một cách khác đó là sử dụng các bảng đường dẫn đã được biên dịch trước (precomplied table of paths), ở đó tất cả các entries được liệt kê trong các nội dung của một file với các entries tương ứng.  

Thứ Ba, 11 tháng 2, 2014

Nghĩ linh tinh, linh tinh.....

2:00 Sáng, mất ngủ, eo ui đến sợ cái đám ma của người trên này (người miền nam), cơ mà nói vậy thì người đã khuất cũng bỏ qua cho hen (không có ý gì hết  á). Cắm headphone vậy, mấy lúc ngồi một mình lại sinh ra hay nghĩ ngợi linh tinh, nghĩ về ngày học sinh, nhớ mấy đứa bạn, thèm cái mùi sân trường,... Thường thì ta hay suy nghĩ về những gì ta chưa (mà đáng ra phải) làm trong quá khứ, để còn có cái cớ mà ngồi nghĩ, ngồi tiếc. Mình, mình tiếc gì? Nhẩm sơ thì cũng nhiều, trách hồi xưa sao mà nó ngang phè phè, hì xin lỗi bản thân mình hiện tại nhe ! trẻ trâu mà ai mà không có một thời. 
Về nhà, mỗi bận về nhà không quên ngó qua trường, hì! trường dạo này khang trang lắm rùi, mấy em học sinh cũng dễ thương nữa :3 Đâu đó là hình bóng của mình và mấy thằng bạn, còn nhớ những bận tan học nán về sau cùng đợi mấy đứa học sinh khác xuống trước vì cái lý do trời ơi: "tụi nó đi dưới chân tụi mình" haha nhảm, nhảm... mà cái lý do đó không phải chỉ ba thằng biết đâu nhá (tao vẫn nhớ con nhỏ kính cận nhìn từ dưới cầu thang lên đó nha). 
Bình Phước mình nóng, sân trường mình cây còn nhỏ, tập thể dục giữa giờ là cực hình, nhưng chắc không thể quên được mấy cái ghế đá mà mấy đứa hay ngồi tám ngược, tám xuôi, rùi tụi trên lầu ném phấn xuống nữa, vui thôi rùi :D 
Nhớ những buổi học nhóm, học nhóm bắt đầu từ lớp mười, hồi mấy thằng còn đạp xe đạp vào nhà Q cơ, về sau có đi xe máy mà cảm giác cũng không khác, dù chơi hay học tao cũng thấy vui. Anh em cùng học, chơi, rùi còn ăn uống với nhau nữa chứ.
Bình Phước mùa mưa, mưa to lắm! Nhớ những trận mưa trong đợt thi tốt nghiệp năm đó không! giờ mưa to  (mà phải là mưa ở BP) là tao thấy nó sao sao (man mác thì phải) ngửi cái mùi đất nhớ những lúc rảnh rỗi lại rủ nhau đá banh, đá banh thì chắc chẳng thằng nào quên rùi, đông cũng đá, bốn thằng cũng đá, sân kiểu nào mà chẳng đá được.
Dạo này dưới quê làm đường, quán bánh xèo đóng cửa, lâu qúa tao không ăn ở đó rùi. Gặp bạn bè cũng hay quảng cáo quán đó ngon, ngồi hàng tiếng tám chuyện ở đó... Vậy nên tao không thích ra ĐX :v
Còn tiếp.... :D

Thứ Sáu, 10 tháng 1, 2014

Tìm hiểu về Mod Security [Phần 1]

Yeah chính thức thi xong. Rảnh rỗi tập trung nghiên cứu mod security. Dự định viết một loạt bài về em này, vừa viết vừa học :)

1. Mở đầu
Ngày nay ứng dụng web ngày càng phổ biến, vấn đề bảo mật ứng dụng web cũng nhận được sự quan tâm đặc biệt do nhận thấy được sự nguy hiểm nằm tại các lỗ hổng bảo mật của các phần mềm web server hoặc các modules phụ trợ, điều này có thể dẫn đến việc một web server bị thỏa hiệp (compromise), thất thoát dữ liệu hoặc là downtime. Hậu quả sẽ rất nặng nề nếu ta không có những biện pháp hợp lý để bảo vệ ứng dụng web của mình, và ModSecurity là một trong những công cụ giúp ta làm điều này.

2. ModSecurity là gì ?
ModSecurity là một web application firewall (WAF). Giống như những firewall thông thường khác, nó lọc những lưu lượng dữ liệu vào và ra để có thể quyết định chặn lại những lưu lượng mà nó nghi ngờ là độc hại dựa theo tập lệnh nó định nghĩa. Nó còn có nhiều tính năng vượt trội khác như là HTTP transaction logging và content injection...

Các rules được tạo và chỉnh sửa sử dụng một định dạng văn bản đơn giản, nó làm cho việc viết rules trở nên đơn giản hơn. Mỗi khi bạn đã quen với cú pháp của ModSecurity, bạn có thể nhanh chóng viết được những rules để block một exploit mới hoặc ngăn chặn một lỗ hổng.

Bạn có thể hình dung ModSecurity như là một trạm trung gian giữa HTTP Request và httpd (dịch vụ web server). Khi phát hiện ra một cuộc tấn công, những chi tiết về vụ tấn công sẽ được lưu vào log file hoặc một email có thể được gửi tới người quản trị viên để báo hiệu có một cuộc tấn công xảy ra trên hệ thống.

3. Tại sao tôi cần dùng ModSecurity ?
Hình dung rằng bạn đang quản trị một web server, server của bạn chạy phà phà không gặp phải bất kì sự cố lớn nào. Một ngày đẹp trời, nó đột nhiên dở chứng - web server port bị đóng và bạn thậm chí không thể đăng nhập được vào server thông qua SSH.

Điều bạn không biết đó là có một 0-day exploit của PHP, xuất phát từ việc web site của bạn có nhiều dynamic content được viết bằng PHP. Hacker có thể lợi dụng exploit này để thực thi shellcode trên server của bạn (thêm vào một user mới và cho phép anh này login vào trong server của bạn thông qua SSH). Một khi đã đi vào bên trong hacker có thể tiến hành leo thang đặc quyền để chiếm lấy quyền root. Một khi đã có quyền root thì "sân khấu" sẽ là của anh ta, muốn làm gì thì làm.

Điều khó khăn trong việc bảo vệ server đó là những exploits mới hầu như ngày nào cũng xuất hiện và bạn sẽ gặp khó khăn trong việc cập nhật và sẽ có những khoảng thời gian server của bạn năm trong tình trạng báo động.

ModSecurity cho phép bạn bảo vệ server của mình thông qua việc viết các luật nhằm bao phủ một dải các viễn cảnh tấn công có thể. Do đó, ModSecurity là một lớp bổ sung có thể giúp bạn bảo vệ theo một cách không cần bản vá.

ModSecurity sẽ giúp bạn ngủ ngon hơn, trên tất cả, nó giải quyết các vấn đề về tầm nhìn: nó giúp bạn nhìn thấy lưu lượng web của mình. Đó là chìa khóa trong security: mỗi khi bạn có thể nhìn thấy HTTP traffic, bạn có thể phân tích nó trong thời gian thực, record nó khi cần thiết và phản ứng lại với các sự kiện. Điểm nổi bật ở đây là bạn có thể làm tất cả mà không tác động gì tới các ứng dụng web. Thậm chí tốt hơn, nó còn có thể áp dụng với bất kì ứng dụng nào - ngay cả khi bạn không thể truy được vào source code.

Thế đã, phần sau sẽ nói về cách cài đặt ModSecurity :3