Post

შეტევა რუსეთზე ნაწილი #1

შეტევა რუსეთზე ნაწილი #1

პოსტი მოკვდა

დასაწყისი

რა გვახსენდება ყველას, როდესაც ჰაკერებზე ვსაუბრობთ? რუსები, ჩინელები და ჩრდილო კორეელები. რა თქმა უნდა, სხვა ქვეყნებიც იღებენ მონაწილეობას კიბერ ომებში, მაგრამ რუსეთი მაინც ლიდერობს ამ მხრივ და მავნე პროგრამების უმეტესი ნაწილიც სწორედ რუსეთიდან მოდის.

რუსები ახერხებენ სხვადასხვა ქვეყნების სამთავრობო ინფრასტრუქტურის ინფიცირებას და ახერხებენ ქსელში დარჩენას. მინდა იგივე მეთოდები ვცადო რუსების წინააღმდეგ და ვნახო, რამდენად მოხერხდება ეს ყველაფერი. ანუ, რამდენად დაცულია რუსული სერვერები და მათი ინფრასტრუქტურა.

რუსული მეთოდები

MITRE ATT&CK framework კარგად აღწერს რუსების ქცევას. დაკვირვების შედეგად დგინდება, რომ რუსებს ე.წ. phishing ტიპის შეტევა უყვართ სამიზნემდე ე.წ. payload-ის მისატანად.

როგორ მუშაობს სისტემა? საჯარო სამსახურში დასაქმებულს მისდის მეილი, რომელსაც თან ახლავს ფაილი ან ლინკი. ტექსტში მაქსიმალურად დამაჯერებლად წერია, რომ ფაილი უნდა გაიხსნას ან ლინკი უნდა შემოწმდეს. ამის შემდეგ კომპიუტერი ინფიცირდება და C2 სერვერს უკავშირდება. იქიდან კი ჰაკერი შიდა ქსელში გავრცელებას იწყებს.

ზოგადად, ასეთ მომენტებში საჭიროა კარგი ქსელის სპეციალისტის ყოლა, ვინც იცის თუ როგორ უნდა დააკონფიგურიროს ქსელი. მაგალითად, თუ ისე მოხდა, რომ L2 სვიჩები არასწორადაა დაკონფიგურირებული და Trunk პორტები სხვა რამისთვისაა გამოყენებული, მაშინ კომპიუტერიდან ე.წ. VLAN hopping ტიპის შეტევის განხორციელებაა შესაძლებელი.

📰 საინტერესო ფაქტი:

VLAN, ანუ Virtual LAN არის Layer 2 Broadcast domain. როდესაც ქსელის ადმინისტრატორს/ინჟინერს სურს, რომ ერთი კომპიუტერის კლასტერი მეორესთვის მიუწვდომელი გახადოს, ამ დროს შემოდის თამაშში VLAN-ები. თუ ეს ყველაფერი სწორად იქნება აწყობილი და გამართული, მაშინ VLAN 100-დან VLAN 200-ზე ინფორმაცია ვერ გადავა.

ეს არის VLAN hopping-ის მაგალითი:

1.png

ამ მაგალითში, ჩანს, რომ Sales დეპარტამენტში არის ინფიცირებული კომპიუტერი, ხოლო სამიზნე მოწყობილობა არსებობს I.T. დეპარტამენტში. სამწუხაროდ, Switch-1-ზე არასწორადაა e0/1 პორტი დაკონფიგურირებული:

1
2
3
4
switchport trunk encapsulation dot1q
switchport mode trunk
switchport trunk allowed vlan 100
switchport trunk allowed vlan 200

ეს არის e0/1 პორტის კონფიგურაცია და ამის გამო PC-1-დან შესაძლებელია frame-ებზე ენკაფსულაციის დამატება და მეორე VLAN-ში გადასროლა.

სწორედ ასეთი რამ შეიძლება ხდებოდეს რუსულ ინფრასტრუქტურაშიც.

პროექტის მონახაზი

ბევრი ფიქრის შემდეგ, გადავწყვიტე, რომ პროექტს რუსული სახელი მივცე, რათა მეტად დაემსგავსო ლეგიტიმურს. ЗаключениеМинэкономикиРоссии ერქმევა პროექტს. ახლა მთავარი მიზანი ისაა, რომ სისტემის shell-ზე მოვიპოვო წვდომა. ანუ, საჭიროა cmd.exe-ის გაჩენა და მასზე დაერთება. დაერთება socket-ის საშუალებით იქნება შესაძლებელი. ასევე VPS დამჭირდება, რომელზეც C2 სერვერს დავაყენებ და გარკვეულ პერიოდში reverse shell-ს მივიღებ კომპიუტერიდან.

რა თქმა უნდა, OpenSSL ბიბლიოთეკას გამოვიყენებ იმისათვის, რომ ტრაფიკი დაშიფრული იყოს, რადგან არ მინდა რუსულმა SOC-მა ნახოს თუ რა ინფორმაციას ვატარებ მათ ქსელში.

დამატებითი ოფციები

ასევე შესაძლებელია დამატებითი ფუნქციონალის ჩაშენება. მაგალითად, შესაძლებელია LSASS პროცესის ე.წ. memory dump წამოვიღო, სადაც user credentials იქნება მოთავსებული. ასე შესაძლებელია დომენში დამატებული მომხმარებლის სახელი და პაროლი ჩამივარდეს ხელში, რაც, რა თქმა უნდა, ქსელში გავრცელების საშუალებას მომცემს.

როგორ? საკმაოდ მარტივია. ხელში თუ დომენში დამატებული მომხმარებლის სახელი და პაროლი ჩამივარდება, მაშინ შემიძლია იმ მომხმარებლის სახელით სხვადასხვა პროცესები გავუშვა გაწეულ სისტემაზე/კომპიუტერზე. მაგალითად, თუ ავიღებთ CreateProcess(); ფუნქციას Win32API-დან, ვნახავთ, რომ ის ე.წ. Undocumented Function-ს იძახებს, რომელიც არის CreateUserProcess();. სწორედ ამ ფუნქციის გამოყენებით შევძლებ დომენში დამატებული მომხმარებლის სახელით ახალი პროცესების შექმნას და მაგალითად ერთ-ერთი Forest-ის ინფიცირებას Active Directory-ში.

თუ ეს მოვახერხე, გამოდის, რომ მთელ ინფრასტრუქტურას მოვედე და ეს ყველაფერი ძალიან გამახარებს.

წინაღობები

რა წინაღობები შეიძლება შემხვდეს? შესაძლოა სისტემაში იყოს Firewall-ები, როგორიცაა Pfsense ან Fortinet. ზოგადად Firewall-ებს გარე მტრისგან თავის დასაცავად იყენებენ, ასე, რომ შესაძლოა ამის გამო ვებსოკეტები გამოვიყენო სოკეტების ნაცვლად, რადგან ვებსოკეტები ვების ნაწილში გადის და მეტას სანდოა. SOC-თან დაკავშირებულ სირთულეებს რაც შეეხება, შესაძლოა ისეთი სისტემა იყოს გამართული, როგორიცაა Security Onion, და ყველა პაკეტის აქტიური მონიტორინგი მიმდინარეობდეს. სწორედ ამიტომ უნდა იყოს ჩემი C2 სერვერი კარგი რეპუტაციის IP მისამართზე დაჰოსტილი(ანუ VirusTotal-ზე ნახვისას შედეგი უნდა გაამწვანოს ყველაფერმა) და ქსელში აქტიური ქმედებებისგან თავი უნდა შევიკაო, ყოველ შემთხვევაში მანამ, სანამ დომენში დამატებულ მომხმარებელს არ ჩავიგდებ ხელში. თუ ისე მოხდა, რომ დომენის მთავარი ადმინისტრატორი ან თუნდაც ადმინისტრატორი ჩამივარდა ხელში, მაშინ საქმე ბოლომდეა მიყვანილი და მთლიან ქსელს გავაკონტროლებ.

საბოლოო ნაბიჯები

მოკლედ, ახლა უნდა ჩამოვწერო ის ნაბიჯები, რომლებიც უნდა გავიარო იმისათვის, რომ ეს ყველაფერი შევძლო.

  1. საჭიროა ისეთი ვირუსის დაწერა, რომელიც ანტივირუსზე არ დაფიქსირდება.
  2. საჭიროა რუსული ე.წ. Lead-ების შეგროვება ე.წ. OSINT-ით ან შეძენით.
  3. ისეთი სოციალური ინჟინერიის მეთოდის შერჩევაა საჭირო, რომელიც რუს ოფისის თანამშრომელზე გაჭრის.
  4. როდესაც ვირუსი გაეშვება, პირველ რიგში წამოვიღებ LSASS პროცესის memory dump-ს შემდგომი ანალიზისათვის და ამის შემდეგ გავჭიმავ reverse shell-ს.
  5. თუ ისე მოხდა, რომ მომხმარებლის სახელები და პაროლები ამოვიღე, შემდეგ დავიწყებ CreateUserProcess(); ფუნქციის გამოყენებას, რათა admin მომხმარებლით შევქმნა სხვადასხვა მავნე პროცესები და ანტივირუსი გამოვრთო.
  6. მთლიანად მოვედო active directory forest-ებს და გავაკონტროლო ყველა კომპიუტერი.

კოდის მონახაზი

თავდაპირველად, საჭირო იქნება WSA-ს ინიციალიზაცია და სერვერის მისამართის აწყობა. ამის შემდეგ, უკვე კავშირი დამყარდება C2-სთან და LSASS პროცესის memory dump წამოვა კლიენტიდან. როდესაც ეს მოხდება, კლიენტი გაუშვებს cmd.exe პროცესს ფანჯრის გარეშე და მის STDIN-ს, STDOUT-ს და STDERR-ს მიაბამს სოკეტს.

უფრო რომ დავკონკრეტდე, სანამ ეს ყველაფერი მოხდება, OpenSSL-ის ინიციალიზაციას გავაკეთებ და სერვერთან კავშირისთანავე გადავერთვები დაშიფრულ კავშირზე. ანუ იდეაში, cmd.exe-ს STD-ები სოკეტთან კი არა, არამედ ssl_context-თან გადაერთდება და SSL tunnel-ში გაივლის ყველაფერი. ეს საშუალებას მომცემს, რომ SOC-სგან დავიცვა თავი.

ასევე Firewall-ებია გასათვალისწინებელი და შესაძლოა სტანდარტული სოკეტები საერთოდ არ გამოვიყენო. თუ ასე მოხდება, მაშინ websockets შემოვა თამაშში და მათ გავატარებ SSL tunnel-ში.

ჩემი აზრით, ასევე კარგი იქნება თუ ოპერაციული სისტემის ვერსიას პირდაპირ წამოვიღებ კომპიუტერიდან. ანუ კავშირს ექნება სამი ფაზა:

  1. LSASS პროცესის memory dump
  2. systeminfo | findstr /B /C:"OS Name" /C:"OS Version" ბრძანების STDOUT
  3. cmd.exe პროცესის STDIN, STDOUT და STDERR
This post is licensed under CC BY 4.0 by the author.