所以前几天我在浏览网页时,我遇到了几个地方要我下载.deb
文件 - 而且由于这些文件是由 root 安装的(因此具有 root 的“权力”和能力),所以我对此并不确定。
答案1
需要考虑的事项:
该网站的知名度如何?例如,它是一个被广告覆盖的随机博客,还是某个论坛上的随机用户,还是一个知名且受人尊敬的网站?
它声称可以安装什么?例如,它声称可以安装内核或图标集,但它只有 1MB 大吗?
您拥有此内容有多“重要”
.deb
?
安全测试的方法:
我用arkose
(它在标准存储库中
)使用我的 debs(和其他东西)进行沙盒处理 - 像这样使用它:
sudo arkose -n -c "cd $PWD; $SHELL"
它能给我一个“沙箱”(也就是“我可以搞砸了!”),对我电脑上的所有内容(包括我的主目录)具有写时复制访问权限 - 所以如果恶意攻击者真的这么做.deb
了sudo rm -rf /*
,我没有丢失任何数据!
另一件没有得到足够重视的事情是进行备份。这些都非常有帮助,我们对这个话题有很多疑问。
简而言之,请确保您考虑清楚,不要只是下载一个随机的 deb 并安装它。
答案2
如果您从不受信任或可疑的来源下载软件包,请保持警惕。在 ubuntuforums.org 等热门论坛上,如果用户的第一篇帖子仅包含“安装这个,对我有用!”之类的简短文字,然后是链接,请小心该链接和/或说明。
如果可能的话,不要使用二进制包,尤其是来自不可信来源的包。获取源代码(对于官方的 Ubuntu 包,可以使用apt-get source package-name
)并查看它。
如果所讨论的包很小,则可能值得对其进行分析。我更喜欢使用终端,因为这样我可以快速访问其他强大的命令行工具,例如、、、、、、、等等ls
。使用制表符补全(即点击以完成命令和文件名),这确实可以节省时间!find
file
less
vim
grep
sed
dpkg
Tab
要下载 .deb 文件,您可以使用浏览器,但复制链接然后使用wget
会更快,因为您已经可以尝试它了。
$ mkdir /tmp/foo && cd /tmp/foo
$ wget http://nl.archive.ubuntu.com/ubuntu/pool/main/n/nvidia-common/nvidia-common_0.2.35_amd64.deb
接下来,是时候检查文件本身了。less
(通过lesspipe
)可以快速概览文件内容。 箭头键、Page Up/Down、Home/End 可用于导航,Q退出程序。
$ less nvidia-common_0.2.35_amd64.deb
nvidia-common_0.2.35_amd64.deb:
new debian package, version 2.0.
size 10802 bytes: control archive= 1877 bytes.
197 bytes, 11 lines * config #!/bin/sh
703 bytes, 16 lines control
741 bytes, 10 lines md5sums
163 bytes, 9 lines * postinst #!/bin/sh
206 bytes, 8 lines * postrm #!/bin/sh
827 bytes, 38 lines * preinst #!/bin/sh
263 bytes, 14 lines * prerm #!/bin/sh
365 bytes, 12 lines templates
Package: nvidia-common
Version: 1:0.2.35
Architecture: amd64
Maintainer: Ubuntu Developers <[email protected]>
Installed-Size: 156
Pre-Depends: dpkg (>= 1.15.7.2)
Depends: python2.7 | python2.6, python (>= 2.7.1-0ubuntu2), python (<< 2.8), debconf (>= 0.5.00) | debconf-2.0, pciutils, python-apt
Conflicts: nvidia-180-modaliases, nvidia-185-modaliases, nvidia-current-modaliases
Replaces: nvidia-180-modaliases, nvidia-185-modaliases, nvidia-current-modaliases
Section: admin
Priority: optional
Description: Find obsolete NVIDIA drivers
This package will find obsolete NVIDIA drivers in use,
detect the hardware and recommend the most appropriate
driver.
Python-Version: 2.6, 2.7
*** Contents:
drwxr-xr-x root/root 0 2011-09-07 11:06 ./
drwxr-xr-x root/root 0 2011-09-07 11:06 ./usr/
drwxr-xr-x root/root 0 2011-09-07 11:06 ./usr/share/
drwxr-xr-x root/root 0 2011-09-07 11:06 ./usr/share/doc/
drwxr-xr-x root/root 0 2011-09-07 11:06 ./usr/share/doc/nvidia-common/
-rw-r--r-- root/root 1174 2011-09-07 11:07 ./usr/share/doc/nvidia-common/changelog.gz
-rw-r--r-- root/root 466 2011-06-24 14:45 ./usr/share/doc/nvidia-common/copyright
...
之后,您将获得软件包依赖关系的概述以及它可能包含的文件类型。是时候提取文件并使用以下方法分析内容了dpkg-deb
。第一个命令将文件树提取到新创建的目录中fs
,第二个命令将其提取到,DEBIAN
因为没有指定其他目标:
$ dpkg-deb -x nvidia-common_0.2.35_amd64.deb fs
$ dpkg-deb -e nvidia-common_0.2.35_amd64.deb
我们将less
再次使用 来分析维护脚本的内容(即在安装(和删除)期间将使用/运行的文件)。prerm
,preinst
,postrm
,postinst
是在删除/安装之前/之后运行的脚本,是需要分析的最重要的文件。使用:n
和:p
在文件之间切换。按=
,您可以获得当前文件名和行号以及列表中的文件数。
$ less DEBIAN/*
如果包脚本看起来正常,那么就该分析已安装的内容了(使用制表符补全)。对于 shell 脚本和解释脚本(如 Python),分析会更容易(假设您熟悉该语言)。
$ less fs/usr/bin/nvidia-detector # fs<TAB><TAB>/usr/ <TAB><TAB>bin ...
$ less fs/usr/lib/nvidia/pre-install
$ ls -la fs/usr/lib # quickly check the directory contents, my memory is weak
drwxr-xr-x 5 peter peter 100 2011-09-07 11:06 .
drwxr-xr-x 5 peter peter 100 2011-09-07 11:06 ..
drwxr-xr-x 2 peter peter 60 2011-09-07 11:06 nvidia
drwxr-xr-x 3 peter peter 60 2011-09-07 11:06 python2.6
drwxr-xr-x 3 peter peter 60 2011-09-07 11:06 python2.7
$ # I conclude: python2.6 is not a symlink to python2.7
$ less fs/usr/lib/python2.7/dist-packages/NvidiaDetector/*
press 'v' to open an editor (e.g. nano, vim) to get syntax highlighting if preferable
特别注意配置文件,特别是如果它们使用类似/etc/init
(用于启动脚本)或/etc/modprobe.d
(用于加载内核模块的选项)的目录。
对于二进制文件,ldd
可以给出程序的用途。下面的程序看起来像一个使用 OpenGL 的图形程序。
$ ldd /usr/bin/glxgears
linux-vdso.so.1 => (0x00007fff7d3ff000)
libGL.so.1 => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 (0x00007fa2ead11000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa2eaa8d000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fa2ea754000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa2ea3b5000)
...
在您确定包看起来有效之后,您可以继续在 VirtualBox 中通过 Live CD 启动来安装它,并使用ps aux
、top
、strace -f -o logfile.txt programname
进行进一步分析。