【问题标题】:How to Convert Chrome Browser History Sqlite Timestamps with Osquery如何使用 Osquery 转换 Chrome 浏览器历史 Sqlite 时间戳
【发布时间】:2020-07-26 13:41:12
【问题描述】:

据我了解,Chrome 浏览器使用 WebKit 时间格式作为浏览器历史数据库中的时间戳。 WebKit 时间表示为自 1601 年 1 月以来的毫秒数。

我发现许多文章似乎可以回答我的问题,但到目前为止都没有。常见的答案是使用下面的公式将 WebKit 转换为人类可读的本地时间:

SELECT datetime((time/1000000)-11644473600, 'unixepoch', 'localtime') AS time FROM table;

来源: https://linuxsleuthing.blogspot.com/2011/06/decoding-google-chrome-timestamps-in.html What is the format of Chrome's timestamps?

我正在尝试在通过 Osquery 收集数据时转换时间戳,使用下面的配置。

"chrome_browser_history" : {
        "query" : "SELECT urls.id id, urls.url url, urls.title title, urls.visit_count visit_count, urls.typed_count typed_count, urls.last_visit_time last_visit_time, urls.hidden hidden, visits.visit_time visit_time, visits.from_visit from_visit, visits.visit_duration visit_duration, visits.transition transition, visit_source.source source FROM urls JOIN visits ON urls.id = visits.url LEFT JOIN visit_source ON visits.id = visit_source.id",
        "path" : "/Users/%/Library/Application Support/Google/Chrome/%/History",
        "columns" : ["path", "id", "url", "title", "visit_count", "typed_count", "last_visit_time", "hidden", "visit_time", "visit_duration", "source"],
        "platform" : "darwin"
    }

"schedule": {
    "chrome_history": {
    "query": "select distinct url,datetime((last_visit_time/1000000)-11644473600, 'unixepoch', 'localtime') AS time from chrome_browser_history where url like '%nhl.com%';",
    "interval": 10
    }
}

结果事件的时间戳记为 1600 年:

"time":"1600-12-31 18:46:16"

如果我更改配置以提取原始时间戳而不进行转换,我会得到如下标记:

"last_visit_time":"1793021894"

根据我所读到的有关 WebKit 时间的信息,它以 17 位数字表示,这显然不是我所看到的。所以我现在不确定这是否是 Osquery、Chrome 或查询问题。感谢所有帮助和见解!

【问题讨论】:

    标签: sqlite google-chrome webkit datetime-conversion osquery


    【解决方案1】:

    解决了。日期时间转换需要在表定义查询中进行。 IE。在“chrome_browser_history”下定义的查询。

    "chrome_browser_history" : {
            "query" : "SELECT urls.id id, urls.url url, urls.title title, urls.visit_count visit_count, urls.typed_count typed_count, datetime(urls.last_visit_time/1000000-11644473600, 'unixepoch') last_visit_time, urls.hidden hidden, visits.visit_time visit_time, visits.from_visit from_visit, visits.visit_duration visit_duration, visits.transition transition, visit_source.source source FROM urls JOIN visits ON urls.id = visits.url LEFT JOIN visit_source ON visits.id = visit_source.id",
            "path" : "/Users/%/Library/Application Support/Google/Chrome/%/History",
            "columns" : ["path", "id", "url", "title", "visit_count", "typed_count", "last_visit_time", "hidden", "visit_time", "visit_duration", "source"],
            "platform" : "darwin"
        }
    
    "schedule": {
        "chrome_history": {
        "query": "select distinct url,last_visit_time from chrome_browser_history where url like '%nhl.com%';",
        "interval": 10
        }
    }
    

    尝试在 osquery 预定查询中进行转换(正如我之前尝试的那样)将不起作用。即:

    "schedule": {
    "chrome_history": {
    "query": "select distinct url,datetime((last_visit_time/1000000)-11644473600, 'unixepoch', 'localtime') AS time from chrome_browser_history where url like '%nhl.com%';",
    "interval": 10
    }
    

    }

    【讨论】:

    • 很高兴您找到了解决方法。这似乎是一个错误。我为它创建了github.com/kolide/k2/issues/2054
    • 是的,错误。我有一个修复它。应该在 4.3.1 中发布
    【解决方案2】:

    试试:

    SELECT datetime(last_visit_time/1000000-11644473600, \"unixepoch\") as last_visited, url, title, visit_count FROM urls;

    这是我前段时间写的 - 运行 osqueryi 和 ATC 配置以读取 chrome 历史文件、导出为 json 并将 json 卷曲到 API 端点的单线器

    https://gist.github.com/defensivedepth/6b79581a9739fa316b6f6d9f97baab1f

    【讨论】:

    • 感谢您的代码,不幸的是仍然无法为我工作。 “last_visited”:“1601-01-01 00:28:32”。似乎 osquery 正在拉的时间戳对我来说是错误的。它们似乎不是 WebKit 格式。
    【解决方案3】:

    您正在使用的东西是非常简单的 sqlite。因此,我将从在 sqlit 中进行调试开始。

    首先,您应该验证数据是否符合您的预期。在我的机器上,我看到:

    $ cp   Library/Application\ Support/Google/Chrome/Profile\ 1/History /tmp/
    $ sqlite3 /tmp/History "select last_visit_time from urls limit 2"
    13231352154237916
    13231352154237916
    

    其次,我将验证基础数学:

    sqlite> select datetime(last_visit_time/1000000-11644473600, "unixepoch") from urls limit 2;
    2020-04-14 15:35:54
    2020-04-14 15:35:54
    

    如果您将其作为文本包含在我们可以复制/粘贴的文本中,那么测试您的配置 sn-p 会更容易。

    【讨论】:

    • 太棒了,有道理。验证 Chrome 正在生成有效的 WebKit 时间戳并将它们存储在 sqlite 中。 sqlite> 从 url 限制 2 中选择 datetime(last_visit_time/1000000-11644473600, "unixepoch"); 2020-04-14 13:21:38 2020-04-13 15:12:20 sqlite> 从 url 限制 2 中选择 last_visit_time; 13231344098641512 13231264340656178
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 2011-01-12
    • 2019-07-11
    相关资源
    最近更新 更多