使用gdb调试openssl
这篇文章是什么?
最近在读一篇论文,里面的一项工作是找到了openssl中没有能够很好的设置constant-time的code path。
方法是通过在相应的函数出设置断点,检测genpkey命令时,是否调用了共享库中的这几部分非constant-time函数。
我其实不怎么懂debug这一套,对gdb等工具只是略有了解,程序的编译链接也不敢说很懂,就只是借助一下参考,简单尝试下作者的方法
具体要怎么做?
openssl的编译安装
源码获取
openssl源码可以从官网下载zip或者从github clone,这里选择github,便于回退到相应的版本
clone
git clone https://github.com/openssl/openssl.git
切换分支到1.0.2版本
git checkout -b 1_0_2 origin/OpenSSL_1_0_2-stable
编译安装
./config --prefix="/home/username/debugopenssl"
make
sudo make install (安装到config配置好的目录中,以免影响到当前系统中的openssl)
sudo su
echo "/home/username/openssl/bin" >> /etc/ld.so.conf //家加入动态链接库的路径
ldconfig -v
测试
在安装目录下的bin文件夹中,执行
./openssl version
不出现报错且输出版本信息即安装成功
操作
安装gdb
如果你是debian/ubuntu/deepin用户,直接
sudo apt install gdb
其他系统也有相应的安装方式
上手
gdb ./openssl //在bin目录下
(gdb)set args genpkey -algorithm RSA -out key.pem //设置参数
(gdb)b bn_gcd.c:120 //添加断点
(gcd)run //运行,观察是否触发断点