この修復には、ネイティブのWindowsスクリプト コマンドを使用するWindows PowerShellスクリプトを活用する必要があります。
これらの手順は、DPAアプリケーション、DPAデータストア、スタンドアロンDPAエージェント(サーバーまたは別のタイプのアプリケーション サーバーに単独でインストール)を含む、あらゆるタイプのWindows DPAインストールに適用できます。
Apache Log4jの脆弱性の詳細については、以下のDell Security Advisoryを参照してください。
これらの手順に関する質問やサポートについては、Dellテクニカル サポートにお問い合わせください。
手動による修復の手順:
メモ:
注:または、log4j_jndiremoval.txtファイルのフル テキストは、これらの手順の最後に提供され、テキスト ファイルにコピーして貼り付けることができます。
Windows PowerShellウィンドウで、DPAアプリケーションまたはDPAデータストアにエージェントをインストールする場合、コマンドは次のようになります。
dpa agent stop
Windows PowerShellウィンドウで、スタンドアロンDPAエージェントをインストールする場合、コマンドは次のようになります。
<dpaエージェントのインストール パス>\dpa stop
Example:
C:\Program Files\EMC\DPA\agent\etc\dpa stop
注:DPAのインストール パスを再度入力する必要があります。
Windows PowerShellウィンドウで、DPAアプリケーションまたはDPAデータストアにエージェントをインストールする場合、コマンドは次のようになります。
dpa agent start
Windows PowerShellウィンドウで、スタンドアロンDPAエージェントをインストールする場合、コマンドは次のようになります。
<dpaエージェントのインストール パス>\dpa start
Example:
C:\Program Files\EMC\DPA\agent\etc\dpa start
付録:
以下は、PowerShellスクリプトの完全なテキストです。このKBに添付されたファイルにアクセスできない場合は、上記の手順で使用するために、このテキストをコピーして、そのままテキスト ファイル(.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テクニカル サポートにお問い合わせください。