d415k's CTF memos.

雑な技術メモ

18 August 2022

RAIDの復元

RAID5

前提条件

3つのディスクイメージファイルが与えられ、 そのうち一つのファイルサイズが他と異なり、破損しているとする。

$ ls -l
-rwxr-xr-x 1 kali kali 5242880 Apr  8 22:50 06f98d35.img
-rwxr-xr-x 1 kali kali    3790 Apr  8 22:50 0c584923.img
-rwxr-xr-x 1 kali kali 5242880 Apr  8 22:50 fef0d1cd.img

ディスクデータの復元

RAID5は2つのHDDのXORをとることで、破損したデータの復元が可能。 復元にはpwntoolsを使用するのが楽。

from pwn import *

dir= './forensics_intergalactic_recovery/'
disk1 = read(dir + '06f98d35.img')
disk2 = read(dir + 'fef0d1cd.img')

disk3 = xor(disk1, disk2)
write(dir + '0c584923_rep.img', disk3)
$ ls -l
-rwxr-xr-x 1 kali kali 5242880 Apr  8 22:50 06f98d35.img
-rwxr-xr-x 1 kali kali    3790 Apr  8 22:50 0c584923.img
-rwxr-xr-x 1 kali kali 5242880 Aug 19 10:07 0c584923_rep.img
-rwxr-xr-x 1 kali kali 5242880 Apr  8 22:50 fef0d1cd.img

RAID5の構築

各ディスクのloop deviceを作成してから、 mdadmでRAID5を構築する。 ※mdadmで並べるloop deviceの順番は要注意。 順番次第では復元したファイルが破損していて読み取れない可能性があるため、別の順番で構築し直してみる。

loop deviceの作成

$ sudo losetup /dev/loop1 06f98d35.img                           
$ sudo losetup /dev/loop2 0c584923_rep.img
$ sudo losetup /dev/loop3 fef0d1cd.img    
$ losetup -a                              
/dev/loop1: []: (/ctf/htb/challange/forensics/Intergalactic Recovery/forensics_intergalactic_recovery/06f98d35.img)
/dev/loop2: []: (/ctf/htb/challange/forensics/Intergalactic Recovery/forensics_intergalactic_recovery/0c584923_rep.img)
/dev/loop3: []: (/ctf/htb/challange/forensics/Intergalactic Recovery/forensics_intergalactic_recovery/fef0d1cd.img)

RAIDの構築

$ sudo mdadm --create /dev/md0 --level 5 --raid-devices 3 /dev/loop3 /dev/loop2 /dev/loop1                 
mdadm: /dev/loop3 appears to be part of a raid array:                                                        
       level=raid5 devices=3 ctime=Fri Aug 19 10:50:04 2022                                                  
mdadm: /dev/loop2 appears to be part of a raid array:                                                        
       level=raid5 devices=3 ctime=Fri Aug 19 10:50:04 2022                                                  
mdadm: /dev/loop1 appears to be part of a raid array:                                                        
       level=raid5 devices=3 ctime=Fri Aug 19 10:50:04 2022                                                  
Continue creating array? y                                                                                   
mdadm: Defaulting to version 1.2 metadata                                                                    
mdadm: array /dev/md0 started.          

$ sudo mkdir /mnt/raid5
$ sudo mount /dev/md0 /mnt/raid5
$ ls -l /mnt/raid5
total 4178
-rwxrwxrwx 1 kali kali 4276775 Apr  8 01:44 imw_1337.pdf

補足

losetup

$ tldr losetup                                                                                             
losetup                                                                                                      
Set up and control loop devices.More information: https://manned.org/losetup.                                
                                                                                                             
 - List loop devices with detailed info:                                                                     
   losetup -a                                                                                                
                                                                                                             
 - Attach a file to a given loop device:                                                                     
   sudo losetup /dev/ /                                                              
                                                                                                             
 - Attach a file to a new free loop device and scan the device for partitions:                               
   sudo losetup --show --partscan -f /                                                       
                                                                                                             
 - Attach a file to a read-only loop device:                                                                 
   sudo losetup --read-only /dev/ /                                                  
                                                                                                             
 - Detach all loop devices:                                                                                  
   sudo losetup -D                                                                                           
                                                                                                             
 - Detach a given loop device:                                                                               
   sudo losetup -d /dev/            

mdamd

$ tldr mdadm          
mdadm
RAID management utility.More information: https://manned.org/mdadm.

 - Create array:
   mdadm --create  --level  --raid-devices  

 - Stop array:
   mdadm --stop 

 - Mark disk as failed:
   mdadm --fail  

 - Remove disk:
   mdadm --remove  

 - Add disk to array:
   mdadm --assemble  

 - Show RAID info:
   mdadm --detail 
tags: CTF - cheatsheet - forensics - raid - disk