top of page
Search
  • Writer's pictureIYP

开源调查:收集信息追踪钱的轨迹 #OSINT 基础和一个 Timeline 示例

本博客会陆续演示一些开源调查的案例,以演示其技巧。公民记者的技能可以完全不差职业记者的(尤其是中国的那些职业记者,嗯…)



**(Open-source intelligence) OSINT 是从公开可用的来源收集数据的调查。OSINT 不同于一般的调查研究(Research),它是为特定的个人或团队量身定制的特的情报处理工作,以支持其必须做出的特定决策,不论是情报机构、调查性新闻记者还是民间独立组织**


想必绝大多数人在阅读巴拿马文件或有关贪腐的法庭文件后只把它们当成了新闻,对挖掘感兴趣的人还是太少。但的确是有的,当然技能也是个关键。


通过阅读法庭文件,你是否想知道该如何查看一些公司所经历的事件的时间表?被税务人员追赶后,他们是否改变了公司结构?你该怎么做才能清楚地看到这些信息?


许多 OSINT 调查涉及到公司,他们的结构,当然还有他们的董事。这里面会需要一些工具,比如 OpenCorporates 就是个非常不错的帮手,TimelineJS 也是一个强大的工具,对于深入调查来说很有效,调查性记者都应该会用。


本文先介绍一些基础知识和简单步骤,然后使用一个实例来展示使用 TimelineJS 做出的调查。


OpenCorporates API 教程


你现在的目标是拥有一个工具,可以打入公司名称和管辖区(2个字母的国家代码)并让它自动返回该公司的所有公司文件。第一步是解决 API 中的公司记录。你可以在这里看到一些文档。看起来你需要使用两个端点:

  1. GET companies/search - 需要一个 q 参数的查询字符串和一个你正在搜索的管辖区(国家/地区)的 jurisdiction_code。

  2. GET companies/jurisdiction_code/company_number/filings - 再次使用 jurisdiction_code 从原始的企业搜索 API 调用返回的公司编号。

这两个小的 API 调用可以为我们提供有关公司的大量信息,但是我们也可以将许多其他 API 调用在 OSINT 目的上(如果您想到的话欢迎在留言板提出建议)。现在我们需要弄清楚如何将这些数据放到时间线上。


与 TimelineJS 连接


正如之前提到的,TimelineJS 是一个了不起的工具,它可以获取一些标准化数据并创建非常漂亮的时间线可视化,其中包括推文,YouTube 视频,并具有极大的灵活性。


如果你希望非常快速地完成,那么查看他们的电子表格格式最好。TimelineJS 允许您执行的操作是以特定格式创建 Google 电子表格,将该电子表格发布到 Web,然后 TimelineJS 将自动读取数据并根据数据创建时间线。


现在我只是打开了这个模板,并从电子表格中复制出所需的标题行,以便我可以用 Python 写出来。我们的脚本只会使用此格式输出 CSV,然后就可以将结果上传到 Google 云端硬盘并开始浏览数据。十分简单。


开始编码


好啦,开始工作。打开 Python 编辑器并开始编写以下代码:

OK, 这是设置代码,我们只是设置导入以引入我们需要使用的模块,创建一些可以传入的命令行参数,并定义一些全局变量来存储命令行信息。现在开始构建公司名称搜索功能:

这里稍微复杂一点点,来深入了解一下:

  • 第 23 行: 定义了 corporate_search 函数,该函数接收将成为我们正在搜索的公司的*公司参数*以及作为双字母国家/地区代码的 jurisdiction 。

  • 第 25-26 行: 构建 API URL,传递 URL 编码的公司名称(25),然后将 jurisdiction_code 参数添加到 URL 以缩窄结果(26)。

  • 第 28-32 行: 发送请求(28),如果我们收到有效的响应(30),处理收到的JSON(32)。

  • 第 34-38 行: 迭代返回的所有匹配项(34),然后检查是否与我们传入脚本的公司名称完全匹配(36),如果有完全匹配,会返回公司编号和公司名称(38)。

好,下一步,让它提取该公司的文件。


  • 第 46 行: 定义了 corporate_filings 函数,以接受从公司搜索返回的 corporation_id 参数,当然还有 jurisdiction。

  • 第 48 行: 在这里正在构建我们的 API url,它将告诉 OpenCorporates 回复申请结果的第一页。

  • 第 58 行: 从搜索结果中获取结果并将其存储在文件变量中,该变量将包含所有公司文件。

  • 第 61-62 行: 由于我们只能从 API 检索 30 个结果,获取总页数(61)然后初始化计数器(62),以便我们可以继续调用 OpenCorporates 来检索所有记录。

  • 第 64-76 行: 继续将页面参数添加到申请请求中(66),发送请求(68),解析(72)和存储结果(74),然后递增页面计数器(76)并继续,直到检索了所有的文件。


一旦完成了所有可用的文件就会返回列表。现在我们有了一份文件清单,需要将它们按到一个 CSV 文件中,该文件符合 TimelineJS 正在寻找的适当结构。现在实现这个功能:

  • 第 87 行: 在这里定义 build_timeline 函数,以获取文件列表,和它们所关联的公司名称。

  • 第 89-93 行: 这是从 TimelineJS 电子表格模板中复制的大字段列表,这些是您的时间线能正确呈现所必需的。

  • 第 95-98 行: 这里只是检查目标 CSV 文件的存在。如果该文件不存在,我们将编写电子表格标题,如果存在,开始将记录添加到电子表格的末尾。

  • 第 100-105 行: 打开输出文件(100),然后初始化 CSV 编写(102),传入文件句柄和字段列表(102)。正如此前提到的,如果这是一个新文件(104),在电子表格(105)中写出标题行。

  • 第 109-123 行: 循环遍历每个文件(109),拆分以 YYYY-MM-DD 格式存储的日期字段(111),然后用我们想要在时间线中显示的所有信息填充字典。最后一步是将数据写入电子表格(123)。

剩下要做的唯一事就是将函数调用添加到脚本的底部,以完成所有操作:

好啦,看看运行下会发生什么。


这里有三个公司,它们都位于非常适合避税的马恩岛(国家代码为 im)。

  • Lochside Limited

  • Korderry Limited

  • Ogral Company Limited

所以你的命令行参数看起来像这样:

# python followthemoney. py -c“Lochside Limited”-j im -t cbcstory.csv

# python followthemoney. py -c“Korderry Limited”-j im -t cbcstory.csv

# python followthemoney. py -c“Ogral Company Limited”-j im cbcstory.csv


现在转到 Google 云硬盘,创建新的电子表格,转到“文件”菜单并选择“导入”,然后使用“更换当前工作表”选项。


转到此处的 TimelineJS 页面,然后按照其步骤发布时间轴电子表格,并生成预览。完成后,你应该能够浏览数据,甚至将其嵌入到自己的网站中。


非常整洁的东西。如果你有大量记录可能会想要把它放大。并且你还可以使用 OpenCorporates API 做更多的事,嗯你懂的。


—— 数据集 ——


以下提供一些数据集,根据你希望调查的内容,应该知道在哪里能找到。


> World Bank Open Data(https://data.worldbank.org/ ):涵盖世界各地的金融、服务指标等数据。


> IMF Economic Data(https://www.imf.org/en/Data ):这是一个非常有用的信息源,包括全球金融稳定报告、地区经济报告、国际金融统计数据、汇率、贸易方向等。


> UN Comtrade Database(https://comtrade.un.org/ ):用户可以以可视化的形式免费访问详细的全球贸易数据。它是国际贸易组织统计数据和相关分析表的官方资源库。


> Global Financial Data(https://www.globalfinancialdata.com/ ):涵盖超过 6 万家公司的数据,时间跨度为 300 年左右,为分析全球经济的变化提供了独特的来源。


> Google Finance(https://finance.google.com/finance ):包括实时股票报价和图表、财经新闻、外汇汇率、投资组合等。


> Google Public Data Explorer(https://www.google.com/publicdata/directory ):提供来自世界银行、OECD、欧盟统计局和丹佛大学等一系列国际组织和学术机构的公开数据和预测。这些数据可以以曲线图、条形图、横截面图的形式显示,也可以在地图上显示。


> Financial Data Finder at OSU(https://guides.osu.edu/c.php?g=280921&p=2281286 ):这里提供一切与金融相关的数据的链接,包括在线世界发展指标(World Development Indicators Online)、世界银行公开数据(World Bank Open Data)、全球金融数据(Global Financial Data)、国际货币基金组织统计数据(International Monetary Fund Statistical Databases)和 EMIS 情报。


Amazon API(https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html :可以按分类浏览 AWS 上的公共数据集,获取大量信息。


> American Society of Travel Agents(https://www.asta.org/ ):ASTA 是世界上最大的旅游协会。该网站提供旅游代理信息,还提供旅游、邮轮、酒店、租车等产品信息。


> Social Mention(https://socialmention.com/ ): Social Mention 是一个社交媒体搜索和分析平台,它将来自世界各地的用户产生的内容聚合成单一信息流。


> Google Trends(https://trends.google.com/trends/ ):展示了在世界上不同地区,特定的搜索词出现的频率。


> Facebook API(https://developers.facebook.com/?locale=en_US ):大家可以学习如何利用 Graph API 发布和检索数据。


> Twitter API(https://developer.twitter.com/en/docs ):利用 Twitter 平台,大家可以在 Twitter 上接入网站或应用程序。


> Instagram API(https://www.instagram.com/developer/ ):大家可以利用 Instagram API 平台构建非自动化的、真实的、高质量的应用和服务。


> Foursquare API(https://developer.foursquare.com/ ):支持访问 Foursquare 数据库,能与 Foursquare 上的用户和商家进行互动。


> HubSpot(https://www.hubspot.com/marketing-statistics ):大型市场数据库。你可以在这里找到最新的市场统计数据和趋势。这里也为社交媒体营销、内容管理、网页分析、登陆页面和搜索引擎优化提供相关工具。


> Moz(https://moz.com/ ):关于 SEO 的相关见解,包括关键词研究、链接建设、网站审计和页面优化,可以帮助公司直接地分析他们在搜索引擎上的位置,改进排名。


> Content Marketing Institute(https://contentmarketinginstitute.com/ ):关于内容营销的最新新闻、专著和研究。


> Associated Press API(https://developer.ap.org/ap-content-api ):无需访问美联社站点,该 API 支持大家用自己的编辑工具搜索和下载内容。大家可以下载美联社、网站成员和来自第三方的图片,还可以下载美联社和选定的第三方制作的视频。


> Google Books Ngram Viewer(https://books.google.com/ngrams ):在线搜索引擎,提供谷歌文本语料库在 1500-2008 年间的 n-gram 数据。可以以图例的形式显示查询词在这些年间出现频率的变化情况。


> Wikipedia Database(https://en.wikipedia.org/wiki/Main_Page ):向用户免费提供平台上的所有数据。


> FiveThirtyEight(https://fivethirtyeight.com/ ):它是一个关注民意调查分析、政治、经济和体育的网站。Github 上的数据和代码基于 FiveThirtyEight 上的故事和内容。


> Google Scholar(https://scholar.google.com/ ):Google 推出的面向学术资源的免费搜索引擎,能够帮助用户查找包括期刊论文、学位论文、书籍、预印本、文摘和技术报告在内的学术文献,内容涵盖自然科学、人文科学、社会科学等多种学科。


> OpenCorporates(https://opencorporates.com/ ):OpenCorporates 是世界上最大的关于公司和公司内部数据的公开数据库,它有超过 1 亿家公司的数据管辖权。


> The CIA World Factbook(https://www.cia.gov/library/publications/the-world-factbook/ ):各国状况。重点关注历史、政府、人口、经济、能源、地理、通信、交通、军事和跨国问题(267 个国家)。


> Octoparse(https://www.octoparse.com/ ):免费的数据提取工具,可以收集上面提到的所有网站的数据。


—— 以下是一个 TimelineJS 调查使用的示例:ISIS 是否在叙利亚 Marea 使用了芥子气攻击?



叙利亚是全球假消息云集的胜地,由于战争的混乱和消息封锁,极难找到真相。但是逻辑和公开资料一直都是可用的,我们用 OSINT 的方法来试试看。


当时,伊斯兰国据称对反叛分子控制的 Marea 地区发动了不分青红皂白的轰炸,公民和反叛分子担心他们将很快袭击阿勒颇北部城镇。Marea 三面环绕着伊斯兰国,位于一个月前的 IS 攻势前线。


当炮弹落下时,Marea 医院的医务人员准备接受伤员,就像平常那样。然而这次似乎不同,医院工作人员很快发现了异常症状。


大约 10 名受伤的人,“其中有一些孩子,来到我们的急诊室,他们称呼吸困难,眼睛和皮肤发红,眼睑肿胀,散发着很臭的气味”,Marea 医院行政主任 Tariq a-Najjar 告诉Shahba新闻。


袭击事件发生后,叙利亚美国医学会(SAMS)报告说“超过 23 名平民表现出化学品暴露的症状。”无国界医生(MSF)证实了 SAMS 的说法,称伤者已在无国界医生的野战医院接受治疗“,四名患者,来自同一家庭,其临床症状、随时间变化的方式、以及患者对中毒情况的证词,都指向了接触化学药剂的结果。“


起初,记者、活动家和新闻网都没有说过“芥子气”,连“非传统的攻击”都没说,正如后来在反对派和政权控制的媒体中的报道中所呈现的那样。


a-Najjar 说,有大约 50 枚炮弹袭击了 Marea。据报道,至少有一枚击中了一个家庭的房子,然后在里面爆炸了。炮弹释放出毒气。四天后无国界医生做出总结。


袭击发生的当天下午,亲反对派叙利亚革命的论坛推特发布了两个 SHAAM 新闻网的照片,显示一名男子呈现红色和浮肿着的眼睛,似乎二十岁左右,据说是 IS- 炮击 Marea 的伤者。


大约五个小时后,以 Hama 为基地的活动家 Abu al-Huda al-Hamawi 在推特上发了一张照片,显示了几乎一样的红色浮肿的眼睛,这次是另一名病人,一名三十多岁的男子,显然是在 Marea 或附近的一家医院接受治疗。

但在次日,由反对派记者 Mohamed al-Fateh 发布的推文中,Marea 报告的另外两例患者受伤的图片讲述了更多的情况。一张照片显示一名年轻男子或一名男孩带有充满液体的眼睑。另一张照片显示一名男子的背部布满了黄色的水泡。


医生促进人权组织(PHR)在向叙利亚公开的声明中评估了涉嫌芥子气中毒患者的照片,称其表现为“芥子气损伤的特征”。


SAMS 报告了芥子气中毒的实地诊断。总部位于阿勒颇的 FSA 联盟第 13 分部于次日同意了这一结论,在 Facebook 上张贴了一张患有严重背部水疱的男子的照片,该照片附文字称他的妻子和孩子正处于“危急状态”,“是毒气弹。”(后来被 Facebook 删除了)


在袭击发生后的几天里,活动人士和记者分享了至少五次炮弹的视频和照片,他们声称这些炮弹是在 Marea 发射的。后来据传拍下的弹片中含有芥子物质。而且这些弹片看起来像是完整的外壳。


在对图像进行分析后,Open Syria 组织认为拍摄上传的弹片极不可能将芥子气洒在 Marea 土地上。现代的芥子气炮弹包含一个高爆炸中心管,在爆炸时将周围的芥子气 - 浓稠的浆状液体,而不是气体 - 变成细云,从而粉碎炮弹。


除了哑弹之外,所有芥子气的炮弹残骸都会分散成碎片,有些大一点的碎片与人的掌心相当。因为不可能事后观察到完整的弹片,于是那些据称是在 Marea 攻击事件发生后拍摄到的在互联网上传播的所谓芥子气弹药的照片是错的。


这不意味着 ISIS 没有攻击或者没有使用芥子气,这是意味着我们还没有真的发现物证:即 可识别的化学弹药的遗骸。


他们如何做到的?


Marea 是此前在叙利亚和伊拉克发生的一系列可能的 IS 芥子气袭击事件的最新目标。据报道,美国军事人员此前两日在伊拉克 Makhmour 以及此前十天在叙利亚 al-Hasakah 对库尔德部队发射的迫击炮碎片进行了实地测试。


Marea 是第一次被攻击,其中患者症状的发作和表现形式,如社交媒体上所记录的那样,与芥子气制剂的接触结果非常接近。但如果 IS 确实在 Marea 部署了芥子气,他们是如何做到的?


首先,修改常规弹药或制造自己的弹药,以提供被盗的或自制的毒气制剂,是一项复杂而危险的任务。IS 的化学家必须从头开始,或使用一种或多种芥子气前体 - 用于大规模生产毒剂的原料化学品,来完善芥类起泡剂。与此同时,工程师必须掌握自己动手制造芥子气炮弹的艰巨挑战,这种炮弹需要能够通过野战炮承受非凡的火力暴力。即使是填充这一设备也可能导致数十人受伤。


“最危险的工作都是填充炮弹......英国装载设施的数千名工人都受到了不利影响; 在一个设施中有九成人生病或受伤,而在另一个工厂,这一比率达到了劳动力的100%“,Gerald Fitzgerald 博士写道,引用他父亲当年的记载,他父亲是一战时德国的毒气专家 Fritz Haber,专门研究芥子气的化学家。


这不是说 ISIS 就做不了。他们曾经部署过复杂的自制武器。但一个显著的问题在于攻击“效果”,芥子气最大的效果是致残和污染,而不是杀戮,芥子气释放后令敌方在数小时或数天内难以接近污染地区,然而它的杀伤率仅在1%到3%之间。而老式的高爆炸药更便宜也是更可靠的杀手,如果死亡和伤残是 IS 的唯一目标的话。


虽然自行调制芥子毒剂和构建机制似乎有些难度过大,但鉴于大规模化学武器计划和地区混乱的令人担忧的组合状况,在叙利亚或伊拉克偷窃、寻找或购买芥子剂的可能性似乎是存在的。


例如,2013 年解密的法国情报报告估计,叙利亚拥有“数百吨库存芥。”虽然有些消息来源称是 560 公吨,但目前还不清楚此前是否有国际努力制止,正如禁止化学武器组织的一份报告所述,阿萨德的化学武器库被摧毁了超过 20 公吨最终形式的芥子气剂。


叙利亚政府声称在 2013 年3月在三个地点销毁了 200 公吨,但是斯德哥尔摩国际和平化学和生物战项目负责人 Jean Pascal Zanders 博士指出:“据我所知,[尽管]禁化武组织已经能够确定芥子气破坏活动发生在叙利亚声称的地点......但未能确定被销毁的数量”。“叙利亚显然缺乏与其相关的活动,包括武器装备和破坏活动的记录……这当然并不意味着武器没有被销毁,但它造成了一定程度的不确定性。”


因此,芥子气原料有可能在叙利亚某处丢失或隐藏。


以上是信息收集,以下是具体分析。


1. 症状:认定和评估


无国界医生指出曾治疗过四个病人,都来自同一个家庭,其中包括“两位家长,三岁的女孩和一个出生五天的女婴”,攻击发生当日在阿勒颇北部的一家无国界医生医院。


虽然无国界医生没有实验室证据可以确认症状的原因,但“患者的临床症状、症状随时间变化的方式、以及患者对中毒情况的证词,都指向接触过化学药剂的结论”,叙利亚无国界医生项目经理 Pablo Marco 在同一份报告中说。


特别值得注意的是水疱延迟发作,无国界医生报告在初次接触后约四小时发现水疱。初始暴露和起泡之间的四小时时间表与芥子气剂临床效果的科学文献相匹配


下表列出了芥子气暴露的症状,以及症状发作的指定时间范围:

在报告的 IS 化学炮袭击后拍摄到的炮弹弹壳很可能是传统的中国或俄罗斯制造的照明弹或 WP 烟雾弹的130毫米底座。于是记者和活动家的声称有误。


炮兵部队很有可能向 Marea 发射各种炮弹,使用烟雾弹和照明弹可以隐藏前一次袭击阿勒颇北部城镇的战斗机的动作,或者为车载 IED 自杀客扫清道路。鉴于有充分证据和评估以证明受伤居民的状况,含有芥状起泡剂的弹壳可能和其他弹壳混在一起了。


正如此前所述,除了哑弹之外很难找到完整的碎片以证明气剂的存在,因此尚未能确定其属于芥子气剂。最简单的假设是,IS 抢劫了现成的化学品火炮,即装载在可行的运载工具中的芥子气剂 - 比如在伊拉克或叙利亚捕获的炮弹或迫击炮。


如上所述,似乎没有什么看似合理的其他可能:独立设计、开发和测试芥子剂,以及提供毒物的装置,那将是复杂危险且昂贵的,并且不比现成的高爆炸药更致命。


下图是袭击发生的当日出现在推特上的弹壳照片:

下图出现在袭击次日的凌晨:

两个假设


假设1:IED 前体


首先,弹壳完好无损。现代的芥子气炮弹包含一个爆炸物的中心管,它的爆炸以分散一种细雾状的浓稠浆态的芥子剂,从而粉碎外壳。因此,应该观察到的是碎片,而不是完整的壳。


其次,炮弹需要使用熔断器进行爆炸,并将其拧入弹丸的螺纹鼻部。然而,上述照片显示被剥去了螺纹,似乎是有意的扩大炮弹引线,表明 Marea叛乱分子可能一直在努力将拍下的弹药转换成简易爆炸装置。居民反过来拍到了实际上是 IED 前体的东西。


假设 2:常规照明弹或 WP 烟雾弹


然而仔细检查发现,壳体似乎不是 IED 前体。相反照片更像是来自弹射炮弹:弹射炮弹鼻部有一个爆炸装药,爆炸时会将炮弹的有效载荷推出尾端,壳体会保持完整,不像壳体有中心爆裂管的那种外壁肯定破裂。



那么究竟是什么炮弹击中了 Marea?鉴于每个炮弹底座上的双旋转带,很容易推测是俄罗斯DTs1或中国 59 型 130 毫米可见光烟雾弹或照明弹。


那么能够造成深度烧伤的 WP 能否导致 Marea 显示的那种伤害?


日内瓦把白磷弹列为违禁武器,明确规定不允许在平民区或针对平民使用,但充许白磷弹被用作烟幕弹或照明弹。“白磷燃烧更多会造成离散的烧伤,这种烧伤非常深,可以渗透到骨骼中,“ 利兹大学毒理学教授 Alastair Hay 写信给 Open Syria,并且指出,“照片所显示的更像是芥子气的证据而不是 WP”。


尽管暴露于 WP 烟雾中可能会造成类似暴露于其他武器化学物质中所造成的创伤,但 WP 似乎不太可能造成照片中所呈现的那种伤害。


在没有可识别的弹药的情况下,Open Syria 发现,经过医学和化学武器专家独立评估的受害者的照片,是 ISIS 芥子气袭击 Marea 的最有说服力的证据。虽然如此,依旧需要指出,那些流传的照片很可能是搞错了状况,不可作为证据


好啦,上述案例希望能呈现一个思路,即什么是证据,如何评估各方面来源的信息。希望中国的独立调查人士能掌握数据收集、证据评估和逻辑梳理的技巧。◾️


感谢帮助 iYouPort!

PayPal 捐赠渠道已开通 https://paypal.me/iyouport

70 views0 comments
bottom of page