如果没有程序员或计算机专家的知识,我怎么能知道某个特定程序或任何软件通常是否没有隐藏的有害功能,从而损害了隐私和安全性?

评论

许多评论都是正确的。另外,如果该软件在* nix或bsd机器上运行,则可以在该软件上进行跟踪,并观察低级功能(即系统调用它的功能)。

如果您是编程专家,则可以使用静态分析。基本上使用IDAPro对该程序进行反编译,然后查看所有系统api的映射,也就是可能造成损害的api。除此之外,您还可以查看该应用程序是否正在打开它应该打开的端口或通过使用防火墙拨打电话。

如果某个特定软件声称完全不执行任何操作,则此问题很容易。

@emory,您应该检查NaDa:bernardbelanger.com/computing/NaDa/index.php

这种关注是某些人选择开放源代码软件的原因之一。如果任何人都可以阅读源代码,那么您就有更大的机会了解该程序是否做了任何令人不愉快的事情。

#1 楼

您可以知道某些软件是否仅按照其宣布的功能执行操作,就好像您知道它们在餐厅为您提供的食物是否中毒一样。用简单的话来说,你不能,但是学会提出了各种方案来解决这个问题:


你可以听朋友和批评家的话来了解给定餐厅的食物是否含有是否享有良好声誉。
您可以取样并将其发送到实验室,该实验室将查找许多(但不是全部)已知的有毒物质。
您可以很好地询问您在厨师做饭时是否可以观察他准备食物。
厨师对客户的满意度是既得商业利益,对食物质量感到满意,尤其是不死也很幸福。
社会会严厉惩处中毒者,并且可以通常假设厨师知道这一点。
如果您太担心,您总是有一个极端的选择,就是不在那里吃饭。

所有这些都可以直接转换为软件世界。确定软件质量和遵守其已发布行为的极端方法包括非常昂贵和无聊的事情,例如“通用标准”,基本上可以归结为了解谁编写了该程序以及使用了哪些工具。

替代答案:每一个某个软件有错误,因此100%保证它不会完全按照预期的方式运行。 (顺便说一下,这个断言包括运行在嵌入在您的汽车中的十几个小型计算机中的软件。)

评论


有史以来最好的类比之一

–卢卡斯·考夫曼(Lucas Kauffman)
13年2月6日在21:40

那很好。替代答案也很出色。

–大卫·斯特拉顿(David Stratton)
13年2月6日在21:42



类比也涵盖了这一点,@cpast。与从街头小贩那里买寿司相比,在一家知名且备受好评的餐厅用餐要安全得多,后者可能会因不小心卖掉一些坏鱼而消失。

–合金
13年2月7日在6:01

另外,您可以要求或查询食谱,自己在家做饭。

– ChristopherHammarström
13年2月7日在10:06

当仔细观察时,每个类比都会分解。类比就是这样:类比说明概念,以便人类的思维能够消化它们。至于您的功能,由于硬件本身并不是没有错误的...

–汤姆韭菜
13年2月7日在20:33

#2 楼

至少不能做到100%的准确性。以程序员的身份讲,用我想要的任何东西编写代码都非常容易,而且不一定就是广告中所宣传的内容。

但是,并非所有意外活动都是恶意的。我假设您更担心恶意活动。即使并非始终都能100%进行检测,但还是有希望的。

您可以使用监视网络流量,文件活动等内容的软件,以查找软件在网络中行为的线索。意想不到的方式。例如(我知道这只是一个基本工具),您可以使用Fiddler来查看特定的应用程序是否正在通过http访问互联网。 (是的,我知道那里有更好的工具。Fiddler只是我想到的第一个工具。)在Windows上,您可以使用Process Monitor来获得更多的见解。在其他平台上也存在类似的工具。

还可以使用其他几种服务来为您执行分析。


http: //www.cwsandbox.org/?page=submit
http://www.threatexpert.com/submit.aspx


评论


动态分析不会为您带来任何好处。无论哪种方式,您都会遇到停顿问题。只要代码足够密集,由12岁的孩子编写的简单逻辑炸弹就会阻止所有类型的动态分析。

– Longpoke
13年2月20日在5:25

#3 楼

尤其是随着软件变得越来越大,越来越复杂,甚至专家们也无法回答这个问题。在这种情况下,最好使用沙箱或强制访问控制方法来处理应用程序的隐私和安全性。这些方法背后的想法是,该软件在控制其功能的系统中运行,并且您允许其仅执行您期望的操作。正确完成后,您可以限制可能的连接,并且在程序尝试访问您不希望访问的文件时收到通知。可以使用非常高级的方法通过代理服务监视内存或解密网络流量。

简而言之,如果您不了解它所做的一切,那么答案就是限制它可以对某件事做的一切。它运行在(操作系统)内部。

评论


“不可能”后面有一个悬挂的星号,但是,正确的是,您应该在此处引用Donald Knuth和MetaPost。

–汤姆韭菜
13年2月6日在21:42

悬挂的星号表示时间不会无限长,也不会太长。

– Jeff Ferland♦
13年2月7日在8:36

典型的沙箱(VM,java等)/ MAC / ACL / DAC等均已失败。我知道目前已知的唯一可用模型是能力模型。另一方面,如果您坚持使用* nix,则唯一的选择实际上就是您提到的内容。

– Longpoke
13年2月7日在20:25

@Longpoke SELinux至少控制每个系统调用,因此包括功能控制。

– Jeff Ferland♦
13年2月7日在20:37

@JeffFerland我不是在谈论linux功能,而是在谈论功能模型。

– Longpoke
13年2月7日在20:44

#4 楼

肯·汤普森(Ken Thompson)在他广为人知的ACM图灵奖演讲“对信任的反思”(现在已经差不多30年前了!)中说:“您不能相信自己并未完全创建自己的代码。”实际上,商业软件也不例外,其他商业产品也不例外,因为在市场上享有良好声誉的生产商提供的软件通常具有更高的更好的可能性。但是,这没有绝对的保证。几十年前,我从一个有病毒的知名生产商那里得到了软盘。在那种情况下,我个人认为
不是公司内部任何人的恶意行为,而是公司的某些计算机受到了外部病毒的感染。但是,显然不可能100%排除公司内部人员将后门引入软件的可能性,而不论其首席执行官是否知道。既然网络战争在全球范围内迫在眉睫,后门可能是恕我直言的一个极为关键的问题。政府的秘密机构可以通过某种方式(通过金钱,胁迫或什至是恶意软件)进行管理,以将这种后门植入某些软件中,这些软件通常用于确保通信的安全性(例如与数字签名有关的那些)并被出售。向某些不友好或潜在不友好的国家使用,并立即或在以后的某个适当时间点(“定时炸弹”等)利用后门以实现破坏目标国家的关键基础设施等目标。等等。Stuxnet,Flame和Gauss是几个名称,应该能说明潜在恶意软件的能力。

评论


扩展您的观点...即使您确实从编写自己的源进行了编译...谁说您使用的编译器没有做坏的事情(假设您不是从汇编中编写的……)

–乔什
13年2月7日在17:13

@Josh:这完全取决于您的赌注有多高。不仅应用软件而且编译器,操作系统和固件/硬件都可能是潜在的危险源。您必须明智地决定在您的情况下需要采取哪些安全措施以及哪些是多余的(并承担疏忽的责任)。 2012年12月,在美国DAPRA会议上,旨在发现,关闭商业IT设备中的后门恶意软件漏洞(fbo.gov/…)。特别要查看链接到的pdf文件中的“背景”部分。

–沉莫功
13年2月7日在20:51



@Josh-然后是硬件。这就是为什么要制造计算机时,我首先使用沙子制造硅。当然,我还没有完成...;)

–内森·朗(Nathan Long)
13年2月8日在19:13



@NathanLong:根据正常媒体的信息,至少有一个国家正在努力开发自己的芯片,从而致力于独立于英特尔等设计。我推测尽管不知道安全问题最终能否最终成为该项目的次要动机。

–沉莫功
13年2月9日在8:28

#5 楼

最终归结为信任。您是否相信发布该软件的公司的声誉。如果它是开源的,那么是否有足够的开发人员使用它,如果出现问题,他们将提出警告。在数量上有一定的优势,因为常用的产品更可能对是否值得信赖进行广泛的研究。除非您非常偏执,否则通常最好是看一下社区对于某个特定软件的评价,但总会有错误,总会有错误。

评论


人们应该注意到关于开放源代码软件通常被忽略的地方:没有任何技术手段可以保证某些二进制/编译程序完全是根据其声称的源代码来构建的。

– JimmyB
13年2月7日在15:44

@HannoBinder-是的,尽管您也可以选择构建自己的版本,尽管不简单,但如果做得很好,则对有限的技术用户应该可行。

– AJ亨德森
2013年2月7日15:56



#6 楼

不幸的是,您不能...

由于一个好的程序员可以被他的用户称为向导,
一个好的木马会完全伪造正常环境以使受害者安静。

某些病毒/特洛伊木马程序可以清除受害系统,以确保


确保另一种病毒不会破坏其工作
确保获得了防病毒功能找不到他
使受害者系统正常运行,以确保受害者保持自信。

所以,您不能!如有疑问请咨询!!!!

#7 楼

正如其他人指出的那样,没有保证的方法来知道。很多时候,您必须信任供应商的完整性和声誉。遵循安全做法,例如仅从您信任的来源安装软件会有所帮助,但就像现实生活中一样,有时我们会信任错误的人。

最后,我认为我们应该采取一定程度的偏执狂。如果您在手机上安装了应用程序,则当手机操作系统通知您手机要访问您的私人信息,您的位置等信息时,不要只是接受或说是。请问问自己,为什么它需要访问权限。如果您认为应用程序所请求的访问权是根据您期望它执行的操作来确定的,则说“是”也许可以。另一方面,如果似乎请求访问的信息或服务超出了它所需要或不感兴趣的范围,则在表示“是”之前,请谨慎一点并保持可疑。