以下の内容はhttps://shikaku-sh.hatenablog.com/entry/c-sharp-bug-eventlogentry-systemtime-to-cveより取得しました。


C# EventLogEntry「システム時刻の変更」のバグ

C# の EventLogEntry を利用して「システム時刻の変更」の情報を取得すると「CVE の検出の可能性」としてメッセージが出力されます。

  • イベント ID: 1
  • タスクのカテゴリ: (5)
  • ソース: Kernel-General

たしかに、現在ではオンライン設定がデフォルトになっているので、このログは出力されないケースがほとんどになっていると思います。(オンライン下では、イベント ID「35」などの Time-Service のほうになると思います)

発生例

取得した events の ProcessID を比較すると Windows イベントビューアーのログと一致します。なので、「CVE の検出の可能性」となっているものは、正しくは「システム時刻の変更(ローカル時刻)」になるはずです。

public static bool TryGetUpdateTimeInLocal(out DateTimeOffset datetime1, out DateTimeOffset datetime2)
{
    var format = "yyyy-MM-ddTHH:mm:ss.fffffffK";
    var events = GetEvent("System", "Microsoft-Windows-Kernel-General", 1, 3);
    var e = events.FirstOrDefault();
    var success = false;

    datetime1 = DateTimeOffset.MinValue;
    datetime2 = DateTimeOffset.MinValue;

    if (e != null)
    {
        var success1 = DateTimeOffset.TryParseExact(
            e.ReplacementStrings[0],
            format,
            CultureInfo.InvariantCulture,
            DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,
            out var dateTimeOffset1);

        var success2 = DateTimeOffset.TryParseExact(
            e.ReplacementStrings[1],
            format,
            CultureInfo.InvariantCulture,
            DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,
            out var dateTimeOffset2);

        if (success1 && success2)
        {
            datetime1 = dateTimeOffset1;
            datetime2 = dateTimeOffset2;
            success = true;
        }
    }

    return success;
}
private static IEnumerable<EventLogEntry> GetEvent(string logName, string sourceName, int instanceId, int count)
{
    var events = new List<EventLogEntry>();

    using (var eventlog = new EventLog(logName))
    {
        for (int i = eventlog.Entries.Count - 1; i >= 0; i--)
        {
            EventLogEntry entry = eventlog.Entries[i];

            if (entry.Source == sourceName && entry.InstanceId == instanceId)
            {
                events.Add(entry);

                if (events.Count() >= count)
                {
                    break;
                }
            }
        }
    }

    return events;
}

補足

知らなかったのですが、この問題は 2017 年には指摘があったみたいです。

おそらくこの問題が現在でも修正されていないのではないかと思います。

参考




以上の内容はhttps://shikaku-sh.hatenablog.com/entry/c-sharp-bug-eventlogentry-systemtime-to-cveより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14