Hardening Project 2021 感想

缘由

跳槽来新公司的时候,老板就和我提过说以后需要参加OWASP的活动,然后据说我司曾经获胜多次,因此某天就被老板叫去报名了。网络安全类的比赛应该算是第一次,之前比较多参加的反而是Hackathon的活动,考虑到比赛时间的限制都差不多,很多经验应该可以共享。

总结

这类活动和黑马一样,时间限制都被限制得较死,我觉得以下几点对于参赛者来说比较重要

  • 提前准备好各类工具、脚本
  • 先从最基本的事情做起
  • 团队沟通要顺畅
  • 一个人负责一块,尽量不要有交叉

工具&脚本

考虑到这是一个以运营网站为前提的活动,以下工具是提前准备比较好的

  • 文件传输工具
    • WinSCP (Windows) / ForkLift (Mac)
      简单易用,可以保存密钥。
  • 数据库管理工具
    • Navicat / Sequel Pro / TablePlus
      手搓命令容易翻车,相信GUI
  • 团队协作
    • Notion / Discord
  • 比赛环境
    在办公室吹着空调喝着饮料,放松心情

快速导入团队公钥并拒绝密码登陆

rm -f ~/.ssh/authorized_keys
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
echo "#Key#" >> ~/.ssh/authorized_keys
sudo sed -i 's/#PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo service sshd restart

一条命令换掉root密码

echo "root:1145141919" | chpasswd

冻结其他非活跃用户

compgen -u #查看用户一览表
passwd -l user01

连接中转服务器并开启SSH隧道代理

#SSH隧道
export REMOTE_HOST="" 
export REMOTE_PORT="22" 
export REMOTE_USER="proxy" 
ssh -N -f -D localhost:1080 -p $REMOTE_PORT [email protected]$REMOTE_HOST

#经由隧道访问其他SSH
ssh -o ProxyCommand="nc -X 5 -x 127.0.0.1:1080 %h %p" [email protected]

#因为RDP不支持Socks5代理,因此可以把远程端口转发至本地后再连接(或者使用Proxifier来强制走代理)
ssh -L 3389: ターゲットIP:3389 [email protected]

防火墙

这是这次比赛里翻车最严重的地方,因为我配置错了导致数据库断连了近两个小时,队友也没通知我。主要原因还是现在各个发行版的默认防火墙都有略微区别,手敲iptables容易翻车,建议使用发行版自带的配置工具firewall-cmd/ufw

Firewall-cmd

sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --add-rich-rule="rule family="ipv4" source address="" port protocol="tcp" port="22" accept" #允许中转机器访问ssh
sudo firewall-cmd --remove-service=ssh
sudo firewall-cmd --add-service=dns
sudo firewall-cmd --add-service=smtp
sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=https
sudo firewall-cmd --add-service=mysql
sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reload

ufw

sudo ufw enable
sudo ufw default deny 
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow from xxx.xxx.xxx.xx to any port 22 proto tcp

处理顺序

因为这是一个8个小时左右就结束的活动,因此主办方会使用的方法能做到简单预测,且因留有一个小时的准备时间,把最基本的事情做好还是比较重要的。

  1. 更改root密码、停用非活动账户
  2. 配置系统防火墙,限制端口暴露
  3. 配置自动备份脚本
  4. 修改数据库root密码,分离数据库,限制IP
  5. 检查CMS的设置(新用户权限、评论、插件等)
    —-以上为必做—-
  6. 检查Apache/Nginx权限,限制跨域访问
  7. 如果有非开源CMS存在,检查源代码
  8. 配置网络防火墙(VyOS),隔离机器访问

团队沟通

这次选用的是Notion来作为进度管理,但中途犯了一件错误,禁止复读机!(一个项目一个页面,不要重复),管理密码的页面因为沟通不畅的原因出现了重复,导致有些密码没有及时同步到另外一个页面,查找密码的时间增长。

这次由于是远程参赛,所以大家都在Discord里语音,语音虽然在传达上非常效率,但在大家都很忙的情况下容易把任务给忘掉,如果出现了问题,一定要用文字留下描述,不仅方便跟进,也方便时候查看时间点

另外团队人手不足的情况下,任务范围尽量不要又交叉,容易导致沟通失效。例如这次数据库单独拆分出去了,但修改数据库信息时又需要修改程序的配置,然而这次负责数据库的人完全没管程序那边,直接改掉了数据库信息导致服务下线。以防类似的情况,最好两个区域都由同一个人负责。

感想

这次原本打算划水一下不拿个倒数第一就行,结果就。。获胜了!XD

Image

Leave a Reply

Your email address will not be published.