Радник із захисту даних: Ручне виправлення вразливостей Apache Log4j сценарій Windows PowerShell (CVE-2021-44228, CVE-2021-45046)
Summary: У цій статті наведено інструкції щодо ручного виправлення агента DPA, запущеного на вузлі Microsoft Windows, на який впливають вразливості Apache Log4j (CVE-2021-44228 і CVE-2021-45046). ...
Instructions
Це виправлення передбачає використання сценарію Windows PowerShell, який використовує власні команди сценаріїв Windows.
Ці інструкції можна застосувати до будь-якого типу інсталяції Windows DPA, включаючи програму DPA, сховище даних DPA та автономний агент DPA (інстальований окремо на сервері або на сервері інших типів програм).
Дивіться наведену нижче консультацію з безпеки Dell для отримання додаткової інформації про вразливості Apache Log4j:
Якщо у вас виникли запитання або допомога з цими інструкціями, зверніться до служби технічної підтримки Dell.
Кроки для ручного виправлення:
Примітка.
- Ці інструкції вимагають, щоб під час інсталяції Windows було інстальовано PowerShell і вона була доступна (за замовчуванням).
- Потрібні права та доступ адміністратора Windows.
- Завантажте текстовий файл, прикріплений до цієї статті бази знань, log4j_jndiremoval.txt.
Примітка: Крім того, в кінці цих інструкцій надається повний текст файлу log4j_jndiremoval.txt, який можна скопіювати та вставити в текстовий файл.
- Скопіюйте або перемістіть текстовий файл на уражений вузол Windows.
- Перейменуйте текстовий файл і змініть розширення файлу з .txt на .ps1. Примітка: Можливо, вам доведеться перейти до параметрів папки Провідника Windows, Перегляд і встановити прапорець для відображення «розширення імені файлу» перед перейменуванням файлу.
- Відкрийте вікно Windows PowerShell. У меню натисніть «Пошук» і введіть PowerShell. Має відобразитися напис "Windows PowerShell". Клацніть правою кнопкою миші на Windows PowerShell і виберіть «Запуск від імені адміністратора».

- Зупиніть службу DPA Agent. Зробіть це за допомогою оснастки служб Windows або з командного рядка за допомогою оболонки Windows PowerShell.
У вікні Windows PowerShell, якщо це інсталяція агента в програмі DPA або сховищі даних DPA, команда така:
Зупинка агента DPA
У вікні Windows PowerShell, якщо це інсталяція автономного агента DPA, команда виглядає так:
<DPA агент встановлення шлях>\dpa зупинка
Приклад:
C:\Program Files\EMC\DPA\agent\etc\dpa stop
- У вікні Windows PowerShell змініть каталоги на каталог з файлом скрипта.

- Запустіть сценарій у вікні PowerShell за допомогою параметра підтвердження, який сканує та перевіряє файли, яких це стосується. Команда така:

- Після натискання enter скрипт запускається, а потім запитує шлях до інсталяції DPA. Введіть повний шлях до інсталяції DPA.

- Після натискання Enter скрипт запускається та виявляє всі вразливі файли.

- Повторно запустіть сценарій у вікні PowerShell, пропустивши опцію «Перевірити». У цьому режимі скрипт сканує та виправляє будь-які файли, яких це стосується. Команда така:
Примітка: Шлях встановлення DPA потрібно ввести знову.

- Після натискання клавіші Enter скрипт сканує та виправляє всі знайдені вразливі файли.

- На цьому виправлення завершено.
- Як необов'язковий крок, перевірте ще раз, запустивши скрипт ще раз. Запустіть сценарій у вікні PowerShell за допомогою параметра «Перевірити», який сканує та перевіряє файли, яких це стосується. Команда така:

- Запустіть службу DPA Agent. Це можна зробити за допомогою оснастки Windows Services або з командного рядка за допомогою Windows PowerShell.
У вікні Windows PowerShell, якщо це інсталяція агента в програмі DPA або сховищі даних DPA, команда така:
Старт агента DPA
У вікні Windows PowerShell, якщо це інсталяція автономного агента DPA, команда виглядає так:
<DPA агент встановлення шлях>\dpa початок
Приклад:
C:\Program Files\EMC\DPA\agent\etc\dpa start
Додавання:
Нижче наведено повний текст скрипта PowerShell. Якщо файл, приєднаний до цієї бази знань, недоступний, то цей текст можна скопіювати та вставити як є у текстовий файл (.txt) для використання у вищезазначених кроках.
param ( [switch]$verify )
'--------------------------------------------------------------------------'
'--------------------------------------------------------------------------'
' Data Protection Advisor CVE-2021-44228, CVE-2021-45046 Patcher 1.1 '
' Developer : Pankaj Pande(p.pande@dell.com) '
' Release : 29 Dec 2021 '
'--------------------------------------------------------------------------'
'Welcome to CVE-2021-44228, CVE-2021-45046 Patching Tool.'
'This utility will assist you in patching Data Protection Advisor for CVE-2021-44228 and CVE-2021-45046 on a Windows system.'
"Special Note : The tool automates remediation steps for all internal components. Following remediation, validation checks are also run. While this tool remediates these vulnerabilities, all available information from Apache on log4j continues to be monitored. If new CVEs are discovered, Dell Technologies' Engineering teams will clarify impact and new remediation steps where necessary. If needed this tool will be updated to include the new remediation steps."
'---------------------------------------------------------------------------'
function List-JndiLookup
{
Param
(
[string[]]$JarFiles,
[string] $FilenameToRemove
)
#initiate the .net namespace
add-type -AssemblyName 'System.IO.Compression.filesystem'
"The number of files to be processed is : $($JarFiles.Count)"
#list the files we are processing
# them later
foreach ($JarFile in $JarFiles)
{
"$JarFile"
}
$processedFiles = 0;
$skippedFiles = 0;
foreach ($JarFile in $JarFiles)
{
# Open the jar for updating (.jar files are just .zip files)
try {
$ProcessJarFile = [io.compression.zipfile]::Open($JarFile,'Update')
} catch {
# Error Handling
}
"Checking $JarFile for $FilenameToRemove"
$totalFilesInJar = ($ProcessJarFile.Entries | Where FullName -Match $FilenameToRemove).Count
if($totalFilesInJar -gt 0){
$processedFiles++
}
#close Zip
try {
$ProcessJarFile.Dispose()
} catch {
# Error Handling
}
}
if ( $processedFiles -gt 0)
{
Write-Host "$processedFiles file(s) found vulnerable" -fore red
Write-Host "Finished...Please make sure to run the patching on this sytem" -fore red
}
else
{
Write-Host "$processedFiles file(s) found vulnerable" -fore green
Write-Host "Finished...No Action needed" -fore green
}
}
function Remove-JndiLookup
{
Param
(
[string[]]$JarFiles,
[string] $FilenameToRemove
)
#initiate the .net namespace
add-type -AssemblyName 'System.IO.Compression.filesystem'
"The number of files to be processed is : $($JarFiles.Count)"
#list the files we are processing
# them later
foreach ($JarFile in $JarFiles)
{
"$JarFile"
}
"Starting patching/Removel Process"
$processedFiles = 0;
$skippedFiles = 0;
foreach ($JarFile in $JarFiles)
{
# Open the jar for updating (.jar files are just .zip files)
try {
$ProcessJarFile = [io.compression.zipfile]::Open($JarFile,'Update')
} catch {
# Error Handling
}
"Checking $JarFile for $FilenameToRemove"
$totalFilesInJar = ($ProcessJarFile.Entries | Where FullName -Match $FilenameToRemove).Count
if($totalFilesInJar -gt 0){
"Deleting unwanted file $FilenameToRemove from $JarFile"
($ProcessJarFile.Entries | Where FullName -Match $FilenameToRemove).Delete()
$processedFiles++
}
else {
"File $FilenameToRemove not found inside $JarFile, this may have already been deleted."
$skippedFiles++
}
# Clean up / close the zip
try {
$ProcessJarFile.Dispose()
} catch {
# Error Handling
}
}
"$processedFiles file(s) processed`n$skippedFiles file(s) skipped"
Write-Host "Finished..." -fore green
}
if ( $verify )
{
Write-Host "Running in dry-run mode. Will not process any files" -fore green
}
else
{
Write-Host "Running in fix mode. Will patch files that are found affected" -fore red
}
$dpa_path = Read-Host "Enter the DPA location "
Write-Host "Running in : '$dpa_path' " -fore green
if ($verify) {
List-JndiLookup -JarFiles (Get-ChildItem -Exclude 'tmp' -Recurse -Path "$dpa_path" -Filter 'dpa*.jar' | ? { $_.FullName -inotmatch 'tmp' }).FullName -FilenameToRemove 'JndiLookup.class'
}
else {
Remove-JndiLookup -JarFiles (Get-ChildItem -Exclude 'tmp' -Recurse -Path "$dpa_path" -Filter 'dpa*.jar' | ? { $_.FullName -inotmatch 'tmp' }).FullName -FilenameToRemove 'JndiLookup.class'
}
Якщо у вас виникли запитання або допомога з цими інструкціями, зверніться до служби технічної підтримки Dell.