Ustawiamy Protected View w Adobe Reader dla wielu komputerów – zabezpieczenie przed exploitem

W zeszłym tygodniu odkryto exploita, który wykorzystuje poważną dziurę w aplikacjach Adobe Reader. Dzięki niej można przemycić do komputera złośliwe oprogramowanie. W tym konkretnym przypadku był to dość zaawansowany malware. Adobe już przygotowuje poprawkę i będzie ona rozdystrybuowana w tym tygodniu. Wykrytą podatność możemy jednak zabezpieczyć sami. Okazało się, że wystarczy aktywować tryb Protected View dla plików pochodzących z potencjalnie niebezpiecznych źródeł. Protected View to tryb super-sandbox, pliki otwierane są w trybie do odczytu. W przypadku pojedynczych komputerów możemy ustawić go ręcznie, poniżej możecie zobaczyć, która opcja powinna zostać włączona.

W przypadku gdy musicie jednak uporać się ze wszystkimi komputerami w firmie, a zazwyczaj jest ich sporo, ustawień można również dokonać dodając wpis do rejestru.

HKCU\Software\Adobe\Adobe Reader\11.0\TrustManager\iProtectedView

Do rozdystrybuowania ustawień na wszystkie komputery w firmie możemy użyć różnych rozwiązań zależnych od specyfiki infrastruktury. Jednym z najszybszych i darmowych  sposobów będzie użycie skryptu, który zdalnie wstrzyknie klucz rejestru do komputerów. Użyjemy do tego celu (wciąż żywego ;)) VBScript. Wymagany jest dostęp do zapisu do zdalnych rejestrów.

Skrypt pobierał będzie listę komputerów z tekstowego pliku wejściowego input.txt – każdy komputer powinien znaleźć się w oddzielnej linii. Ustawienia Adobe są przypisane każdemu użytkownikowi indywidualnie. Będziemy musieli operować na kluczach HKU, aby zmienić ustawienia dla wszystkich, nawet niezalogowanych, użytkowników. Pomijamy wszystkie konta serwisowe. W stworzonym kluczu rejestru zostanie ustawiona wartość odpowiadająca opcji „Files from potentialy unsafe locations”, jeżeli chcemy włączyć PV dla wszystkich plików należy odkomentować dwValue = „2”.

'Lokacja loga
LogFilePath = "PV_logfile.txt"
'Nazwa pliku wejsciowego
InputFile = "input.txt"
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Const HKEY_LOCAL_MACHINE = &H80000002

'tworzenie pliku z logami
Set objFSO = CreateObject("Scripting.FileSystemObject")
if Not objFSO.FileExists(LogFilePath) Then
objFSO.CreateTextFile(LogFilePath)
End If
Set objLogFile = objFSO.OpenTextFile("PV_logfile.txt", 8)
Logger("======- LOG STARTED -======")

'sprawdzanie dostepnosci pliku wejsciowego
if objFSO.FileExists(InputFile) Then
     Set objInputFile = objFSO.OpenTextFile(InputFile, 1)
Else
     MsgBox "Plik wejsciowy nie istnieje"
     WScript.Quit
End If

Do While objInputFile.AtEndOfStream <> True
     strComputer = Trim(objInputFile.ReadLine)     
     If checkAvailability(strComputer) Then 'sprawdzanie dostępności maszyny
               Set objRegistry=GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
               strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
               objRegistry.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubkeys
          For Each objSubkey In arrSubkeys
               strUserID = objSubkey
               If Not InStr(strUserID,"Classes") Then
                    If strUserID <> "S-1-5-18" And strUserID <> "S-1-5-19" And strUserID <> "S-1-5-20" then
                         strKeyPath = "HKU\" & strUserID & "\Software\Adobe\Adobe Acrobat\11.0\TrustManager"
                         strValueName = "iProtectedView"
                         dwValue = "1" 'Protected View - "Files from potentialy unsafe locations"
                         'dwValue = "2" 'Protected View - "All"
                         objRegistry.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,dwValue
                    End If
               End if
          Next          
          Logger(strComputer & " - włączono Protected View")
     Else
     Logger(strComputer & " nie pinguje")
     End if          
Loop

'===== Funkcje
Function checkAvailability(computer)          
Set colItems = objWMIService.ExecQuery ("Select * from Win32_PingStatus " & "Where Address = '" & computer & "'")
For Each objItem in colItems
     If objItem.StatusCode = 0 Then
          checkAvailability = TRUE         
     End If
Next
End Function

Sub Logger(text)
objLogFile.WriteLine Date() & " at " & Time() & text     
End Sub

Przeczytaj także...

Dodaj komentarz