ログを暗号化/複合化する
ログを暗号化する
log4net暗号化ライブラリの用意
ArtisanCode.Log4NetMessageEncryptor.dll
ArtisanCode.SimpleAesEncryption.dll
- 以下の公式サイトからソースコードをダウンロードしてビルドする https://github.com/ArtisanCode/Log4NetMessageEncryptor https://github.com/ArtisanCode/SimpleAesEncryption
dllの参照をプロジェクトに追加
- 上の二つのdllをプロジェクトの参照に追加する
- 合わせて
log4net.dll
も Log4NetMessageEncryptor のビルドに使用したものと同じバージョンのdllに置き換える
App.config の追加設定
- <configSections> と <Log4NetMessageEncryption> を追加
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="Log4NetMessageEncryption" type="ArtisanCode.Log4NetMessageEncryptor.Log4NetMessageEncryptorConfiguration, ArtisanCode.Log4NetMessageEncryptor"/>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.1"/>
</startup>
<Log4NetMessageEncryption CipherMode="CBC" Padding="ISO10126">
<EncryptionKey KeySize="256" Key="3q2+796tvu/erb7v3q2+796tvu/erb7v3q2+796tvu8="/>
</Log4NetMessageEncryption>
</configuration>
log4net.config を書き換える
- FileAppender を ForwardingAppender を経由するように書き換える
<?xml version="1.0" encoding="utf-8" ?> <configuration> <log4net> <appender name="FileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="${APPDATA}\\log\\" /> <param name="DatePattern" value='yyyy-MM-dd".log"' /> <param name="RollingStyle" value="date" /> <param name="StaticLogFileName" value="false" /> <param name="AppendToFile" value="true" /> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMax" value="FATAL" /> <param name="LevelMin" value="TRACE" /> </filter> <param name="MaximumFileSize" value="10MB" /> <param name="MaxSizeRollBackups" value="10" /> <layout type="log4net.Layout.PatternLayout"> <ConversionPattern value="%date [%property{pid}(%thread)] %-5level %logger - %message%n" /> </layout> </appender> <appender name="ForwardingAppender" type="ArtisanCode.Log4NetMessageEncryptor.MessageEncryptingForwardingAppender, ArtisanCode.Log4NetMessageEncryptor"> <appender-ref ref="FileAppender" /> </appender> <root> <level value="ALL" /> <appender-ref ref="ForwardingAppender" /> </root> </log4net> </configuration>
- あとは通常と同様にログ出力すれば暗号化されたログがログファイルに出力される
暗号化キーを隠蔽する
標準では暗号化キーを App.config に平文で記述しているため、これを隠蔽するために 暗号化を行う ArtisanCode.SimpleAesEncryption.dll を改変する
- ダウンロードしたソースコードの EncryptionKeyConfigurationElement.cs のプロパティ Key を、以下のように固定文字列を返すように変更する
public string Key { get { // return this["Key"] as string; return "3q2+796tvu/erb7v3q2+796tvu/erb7v3q2+796tvu8="; } set { this["Key"] = value; } }
- App.config 側のKeyは空(”“)にしておく
- さらに暗号化キー流出のリスクを低くする場合、ビルド後に難読化をかけたり、ロジックでキーを組み立てる等の方法が考えられる
暗号化されたログファイルの複合化
ArtisanCode.Log4NetMessageEncryptor のソースコードに同梱されているツールを使用する
LogDecrypt.exe
- 使用例
LogDecrypt --input <複合対象ファイルパス> --key <暗号化キー>