解决方案:Github敏感信息收集工具Gitrob介绍

优采云 发布时间: 2022-09-29 06:30

  解决方案:Github敏感信息收集工具Gitrob介绍

  简介:

  开发人员一般都愿意分享代码,并且很多人都愿意通过在GitHub上开源的形式分享。许多公司也会将GitHub作为一个便利所,通过创建GitHub组织结构让员工加入的方式存储私人及公开代码库。

  有时员工可能会发布一些不宜公开的内容,包括可能收录敏感信息的内容或者可能导致系统被攻陷的内容。这种事情可能是不小心导致的或者员工并不了解这些内容属于敏感信息。

  Gitrob是一种命令行工具,可帮助组织机构及安全专业人员发现此类敏感信息。该工具可对所有的公共组织及成员库进行遍历,然后将文件内容与许多文件格式进行比对,而这些文件通常会收录敏感信息及危险信息。

  Gitrob如何工作?

  在GitHub库中寻找敏感信息并非新事物,大家已经知道通过GitHub的搜索功能寻找诸如私钥及证书之类的信息,然而,Gitrob让针对某个特殊组织机构的搜索变得更为简单。

  Gitrob做的第一件事是采集关于组织机构本身的所有公共库。之后采集关于组织机构成员及他们的公开库,这样就会编译出可能与组织结构相关的库列表。

  (Gitrob从组织机构成员中采集库)

  当库列表编译完成后,它会采集每个库中的文件名称并且通过一系列标志文件的观察员进行运行,看它们是否与已知敏感文件格式相匹配。这一步可能会需要花费一点时间,如果这个组织机构规模大或者成员有很多公共库。

  (Gitrob筛选出所采集的库并标记出有趣的文件)

  所有的成员、库以及文件都会被存储至一个PostgreSQL数据库中。当所有东西都通过筛选后,将会本地开启机器上的Sinatra web服务器,作为一个简单的web应用程序展现出所采集的数据以供分析。

  (所有库中的有趣文件都会展现在一个列表中以便分析。位于右上角的快速过滤器可用于查找特殊的文件。)

  (点击一个文件将会显示出内容,且句法会高亮显示。同时也会显示出文件被标记的原因)

  

  (组织机构成员可以格布局形式查看。非常容易识别出拥有有趣文件的成员。)

  (点击其中一名成员会显示出他们的信息及公开库。而带有结果的库会在桔色背景中高亮显示。)

  (所有采集的库都可在表格中查看,其中收录他们的描述以及网站URL。带有结果的库会以桔色背景高亮显示。)

  (所有位于特定库中的文件都可被查看。右上角的快速过滤器可用于查找特定文件。)

  一些发现

  在开发Gitrob的过程中,我在属于多家不同规模公司的组织机构中进行了测试,对来自现实生活的数据进行了使用,同时在结果发布之前会通知给公司。

  这个工具发现了一些有意思的事情,范围囊括低级信息、糟糕信息、直到公司销毁的信息。如下是几个例子。

  备注

  我对截屏中的敏感信息以及可识别信息进行了摘选;让别人尴尬或者暴露别人信息之事皆非我兴趣所在。再重申一次,所有的这些结果均已上报。

  (这是在一个.bash_profile文件中发现的。员工想得很周到将密码隐了,但依然可从他的命令别命中勾勒出大量的基础架构。同时它告知攻击者如果对这个员工实施钓鱼将会获得对许多数据库的根访问权限。)

  (这是在一个.bash_profile文件中发现的。这个命令别名显示公司工具中存在一个秘密的 black site 域名在进行每日操作,例如分析、矩阵及持续整合。这会增加攻击几率。)

  (命令历史文件会收录许多敏感信息,例如密码、API密钥以及主机名称。)

  (一个开发人员将一个Wordpress网站进行了开源,包括一个完整的数据库其中含有他用户账户的密码哈希。这个密码可能也适用于其他地方?)

  (一个聊天机器人的.env文件中收录几个凭证信息。除了一个攻击者能够对Campfire聊天进行监控、从数据商店中盗取信息外,他们还可以通过Nest的凭证信息控制某处的温度。)

  (一家公司将它们的文档网站即一个简单的Ruby On Rails应用程序进行了开源。他们忘记将应用程序的秘密标记移除,这个标记可能会被利用以达到远程代码执行的目的。)

  (一名开发人员登记了他的KeePass密码数据库,其中收录174条记录。虽然被严格加密,但主密码依然可被暴力破解。在这种情况下,当然有人有兴趣对这个任务添加很多的运算容量。)

  

  (在一个.zshrc文件中发现了亚马逊EC2凭证。根据特权级别,它可能导致基础架构被完全控制。)

  (一名员工登陆到一个亚马逊EC2密钥中,这可能会导致公司的基础架构被完全控制。)

  (上个截屏中的员工同时登陆到他的私人SSH密钥,这可能会导致公司的SSH服务器被访问。同时可能会被用来克隆私有的组织机构库。)

  安装并设置Gitrob

  Gitrob以Ruby编写并且最低要求1.9.3的版本及以上版本。如果你运行的是更早的版本,可通过RVM很容易地安装新版本。如果你在Kali上安装Gitrob,你差不多已经准备好了,只需通过gem安装包就可对Bundler进行更新,并且安装一个PostgreSQL而apt-get会在终端安装libpq-dev。

  Gitrob是一个Ruby gem,因此安装是一个简单的终端gem安装gitrob。同时它会自动安装所有的code dependencies。

  PostgreSQL数据库对于Gitrob存储数据来说也是必须的。安装PostgreSQL非常简单;可从这里获知Mac OS X以及基于Linux的Ubuntu/Debian安装向导信息。如果你要在Kali上安装Gitrob,你已经安装了PostgreSQL,然而你需要在终端通过 service postgresql start启动服务器。

  当安装好PostgreSQL时,需要为Gitrob创建一个用户及数据库。可在终端输入以下命令完成:

  最后我们需要的是一个GitHub访问token,以与他们的API进行会话。最便捷的方式是创建一个个人访问token。如果你打算单独使用Gitrob或者在一个非常大的组织机构进行,可能需要调低所使用的threads,同时可能需要配置Gitrob以使用你或同事的访问token,以避免受到速率限制。

  当一切准备就绪时,就可运行gitrob了——进行配置并且你会看到一个配置向导要求你提供数据库连接详情以及GitHub访问boken。所有的这些配置都能够通过再次运行相同的命令进行改变。配置会被保存在~/.gitrobrc-中,没错,Gitrob也会对这个文件进行查询,所以要当心。

  (使用安装向导设置Gitrob。)

  当所有一切都安装好之后,你可以开始通过在终端运行 gitrob -o 来分析组织机构了。可用通过gitrob—help来查看其他选项。

  为什么要创建Gitrob

  我在SoundCloud安全团队工作,目前的任务之一是创建一个系统能够持续盯着我们的GitHub组织机构以查找多个可能会带来安全风险的东西,包括在库中查找可能的敏感文件。在开发过程中,我觉得将系统的部分东西拿出来作为一个工具进行开源是一件有趣的事儿,这个工具既可用来防御也可用来攻击。

  如果你在公司负责使用GitHub托管代码,Gitrob可被用来对你的组织结构进行定期检查,看是否在库中存在敏感文件。

  如果你是攻击方,就像一个专业的渗透测试人员那样,Gitrob可被用于初始的信息采集阶段来查找任何东西,它可为你提供一个立足点或者增加目标的攻击面。Gitrob同时也可提供给你用户名、姓名、邮件地址以及内部系统的名称,这些信息可用于钓鱼攻击以及社会工程攻击。如果幸运的话,Gitrob甚至还可以提供给你一份完整的pwnage而无需向目标系统发送任何一个恶意数据包。

  操作方法:常用的大数据采集工具

  大数据的来源多种多样,在大数据时代背景下,如何从大数据中采集出有用的信息是大数据发展的最关键因素。大数据采集是大数据产业的基石,大数据采集阶段的工作是大数据的核心技术之一。

  为了高效采集大数据,依据采集环境及数据类型选择适当的大数据采集方法及平台至关重要。下面介绍一些常用的大数据采集平台和工具。

  1、Flume

  Flume作为Hadoop的组件,是由Cloudera专门研发的分布式日志采集系统。尤其近几年随着Flume的不断完善,用户在开发过程中使用的便利性得到很大的改善,Flume现已成为Apache Top项目之一。

  Flume提供了从Console(控制台)、RPC(Thrift-RPC)、Text(文件)、Tail(UNIX Tail)、Syslog、Exec(命令执行)等数据源上采集数据的能力。

  Flume采用了多Master的方式。为了保证配置数据的一致性,Flume引入了ZooKeeper,用于保存配置数据。ZooKeeper本身可保证配置数据的一致性和高可用性。另外,在配置数据发生变化时,ZooKeeper可以通知Flume Master节点。Flume Master节点之间使用Gossip协议同步数据。

  Flume针对特殊场景也具备良好的自定义扩展能力,因此Flume适用于大部分的日常数据采集场景。因为Flume使用JRuby来构建,所以依赖Java运行环境。Flume设计成一个分布式的管道架构,可以看成在数据源和目的地之间有一个Agent的网络,支持数据路由。

  Flume支持设置Sink的Failover和加载平衡,这样就可以保证在有一个Agent失效的情况下,整个系统仍能正常采集数据。Flume中传输的内容定义为事件(Event),事件由Headers(收录元数据,即Meta Data)和Payload组成。

  Flume提供SDK,可以支持用户定制开发。Flume客户端负责在事件产生的源头把事件发送给Flume的Agent。客户端通常和产生数据源的应用在同一个进程空间。常见的Flume 客户端有Avro、Log4J、Syslog和HTTP Post。

  2、Fluentd

  Fluentd是另一个开源的数据采集架构,如图1所示。Fluentd使用C/Ruby开发,使用JSON文件来统一日志数据。通过丰富的插件,可以采集来自各种系统或应用的日志,然后根据用户定义将日志做分类处理。通过Fluentd,可以非常轻易地实现像追踪日志文件并将其过滤后转存到 MongoDB 这样的操作。Fluentd可以彻底地把人从烦琐的日志处理中解放出来。

  图1 Fluentd架构

  Fluentd具有多个功能特点:安装方便、占用空间小、半结构化数据日志记录、灵活的插件机制、可靠的缓冲、日志转发。Treasure Data公司对该产品提供支持和维护。另外,采用JSON统一数据/日志格式是它的另一个特点。相对Flume,Fluentd配置也相对简单一些。

  Fluentd的扩展性非常好,客户可以自己定制(Ruby)Input/Buffer/Output。Fluentd具有跨平台的问题,并不支持Windows平台。

  Fluentd的Input/Buffer/Output非常类似于Flume的Source/Channel/Sink。Fluentd架构如图2所示。

  图2 Fluentd架构

  3、Logstash

  Logstash是著名的开源数据栈ELK(ElasticSearch,Logstash,Kibana)中的那个L。因为Logstash用JRuby开发,所以运行时依赖JVM。Logstash的部署架构如图3所示,当然这只是一种部署的选项。

  图3 Logstash的部署架构

  

  一个典型的Logstash的配置如下,包括Input、Filter的Output的设置。

  input {<br /> file {<br /> type =>"Apache-access"<br /> path =>"/var/log/Apache2/other\_vhosts\_access.log"<br /> } <br /> file {<br /> type =>"pache-error"<br /> path =>"/var/log/Apache2/error.log"<br /> }<br />}<br />filter {<br /> grok {<br /> match => {"message"=>"%(COMBINEDApacheLOG)"}<br /> } <br /> date {<br /> match => {"timestamp"=>"dd/MMM/yyyy:HH:mm:ss Z"}<br /> }<br />}<br />output  {<br /> stdout {}<br /> Redis {<br /> host=>"192.168.1.289"<br /> data\_type => "list"<br /> key => "Logstash"<br /> }<br />}<br />

  几乎在大部分的情况下,ELK作为一个栈是被同时使用的。在你的数据系统使用ElasticSearch的情况下,Logstash是首选。

  4、Chukwa

  Chukwa是Apache旗下另一个开源的数据采集平台,它远没有其他几个有名。Chukwa基于Hadoop的HDFS和MapReduce来构建(用Java来实现),提供扩展性和可靠性。它提供了很多模块以支持Hadoop集群日志分析。Chukwa同时提供对数据的展示、分析和监视。该项目目前已经不活跃。

  Chukwa适应以下需求:

  (1)灵活的、动态可控的数据源。

  (2)高性能、高可扩展的存储系统。

  (3)合适的架构,用于对采集到的*敏*感*词*数据进行分析。

  Chukwa架构如图4所示。

  图4 Chukwa架构

  5、Scribe

  Scribe是Facebook开发的数据(日志)采集系统。其官网已经多年不维护。Scribe为日志的“分布式采集,统一处理”提供了一个可扩展的,高容错的方案。当中央存储系统的网络或者机器出现故障时,Scribe会将日志转存到本地或者另一个位置;当中央存储系统恢复后,Scribe会将转存的日志重新传输给中央存储系统。Scribe通常与Hadoop结合使用,用于向HDFS中push(推)日志,而Hadoop通过MapReduce作业进行定期处理。

  Scribe架构如图5所示。

  图5 Scribe架构

  Scribe架构比较简单,主要包括三部分,分别为Scribe agent、Scribe和存储系统。

  6、Splunk

  在商业化的大数据平台产品中,Splunk提供完整的数据采集、数据存储、数据分析和处理,以及数据展现的能力。Splunk是一个分布式机器数据平台,主要有三个角色。Splunk架构如图6所示。

  图片

  

  图6 Splunk架构

  Search:负责数据的搜索和处理,提供搜索时的信息抽取功能。

  Indexer:负责数据的存储和索引。

  Forwarder:负责数据的采集、清洗、变形,并发送给Indexer。

  Splunk内置了对Syslog、TCP/UDP、Spooling的支持,同时,用户可以通过开发 Input和Modular Input的方式来获取特定的数据。在Splunk提供的软件仓库里有很多成熟的数据采集应用,如AWS、数据库(DBConnect)等,可以方便地从云或数据库中获取数据进入Splunk的数据平台做分析。

  Search Head和Indexer都支持Cluster的配置,即高可用、高扩展的、但Splunk现在还没有针对Forwarder的Cluster的功能。也就是说,如果有一台Forwarder的机器出了故障,则数据采集也会随之中断,并不能把正在运行的数据采集任务因故障切换(Failover)到其他的Forwarder上。

  7、Scrapy

  Python的爬虫架构叫Scrapy。Scrapy是由Python语言开发的一个快速、高层次的屏幕抓取和Web抓取架构,用于抓取Web站点并从页面中提取结构化数据。Scrapy的用途广泛,可以用于数据挖掘、监测和自动化测试。

  Scrapy吸引人的地方在于它是一个架构,任何人都可以根据需求方便地进行修改。它还提供多种类型爬虫的基类,如BaseSpider、Sitemap爬虫等,最新版本提供对Web 2.0爬虫的支持。

  Scrapy运行原理如图7所示。

  图片

  图7 Scrapy运行原理

  Scrapy的整个数据处理流程由Scrapy引擎进行控制。Scrapy运行流程如下:

  (1)Scrapy引擎打开一个域名时,爬虫处理这个域名,并让爬虫获取第一个爬取的URL。

  (2)Scrapy引擎先从爬虫那获取第一个需要爬取的URL,然后作为请求在调度中进行调度。

  (3)Scrapy引擎从调度那里获取接下来进行爬取的页面。

  (4)调度将下一个爬取的URL返回给引擎,引擎将它们通过下载中间件发送到下载器。

  (5)当网页被下载器下载完成以后,响应内容通过下载器中间件被发送到Scrapy引擎。

  (6)Scrapy引擎收到下载器的响应并将它通过爬虫中间件发送到爬虫进行处理。

  (7)爬虫处理响应并返回爬取到的项目,然后给Scrapy引擎发送新的请求。

  (8)Scrapy引擎将抓取到的放入项目管道,并向调度器发送请求。

  (9)系统重复第(2)步后面的操作,直到调度器中没有请求,然后断开Scrapy引擎与域之间的联系。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线