V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huahsiung
V2EX  ›  分享发现

解决 ssh 爆破的一个方法,使用不支持的加密套件

  •  
  •   huahsiung · 313 天前 · 3736 次点击
    这是一个创建于 313 天前的主题,其中的信息可能已经有所发展或是发生改变。

    ssh 服务器是我手动实现的,当时我了安全,强行只启用了一种加密。

    今天一看,竟然被爆破了

    p94cbxH.md.jpg

    爆破器支持的加密套件 [email protected] [email protected] aes128-ctr aes192-ctr aes256-ctr

    直接握不了手。

    29 条回复    2023-05-23 19:06:37 +08:00
    hingle
        1
    hingle  
       313 天前 via iPhone   ❤️ 1
    “ ssh 服务器是我手动实现的”

    这才是最不安全的方式。
    huahsiung
        2
    huahsiung  
    OP
       313 天前
    @hinglelibssh.org 现有的库实现的,也不能说不安全吧,不然使用 libssh.org 的都不安全了。在 libssh 上层代码,代码也没有超过 100 行,低级错误应该基本都避免了
    illl
        3
    illl  
       313 天前 via iPhone
    只允许用证书没有更安全嘛
    Radeon
        4
    Radeon  
       313 天前
    支持。这个想法很好
    churchmice
        5
    churchmice  
       313 天前 via Android   ❤️ 1
    证书登录保平安
    0o0O0o0O0o
        6
    0o0O0o0O0o  
       313 天前 via iPhone   ❤️ 1
    赞同#1 ,就算用它们的库,你自己的代码会不会有漏洞,你的编译会不会和安全实践不一致,上游的漏洞、补丁是不是及时关注处理,等等
    hash
        7
    hash  
       313 天前 via iPhone   ❤️ 3
    弄一扇正常的防盗门,而不是把门框用水泥糊满
    titanium98118
        8
    titanium98118  
       313 天前 via Android
    证书登录保平安
    myqoo
        9
    myqoo  
       313 天前
    ssh 这种服务完全没必要开放给所有 IP
    huahsiung
        10
    huahsiung  
    OP
       313 天前
    @0o0O0o0O0o 软件已经用上几个月了,就像自己做的东西,在难吃也...,不过现在看起来不是很难吃。

    所有人都所有同一个软件,攻击面就会很大。不知道为什么 v 站的风气就是“造不如买”。都觉得使用别人的更安全。

    软件只实现了 req-pty ,exec 和 scp [scp 强行把所有文件重定向到 /upload] ,攻击面应该很小。不也有不少人使用 openssh 也不会关注上游的漏洞、补丁啊

    反正总要去试的,总比等别人好吧。
    huahsiung
        11
    huahsiung  
    OP
       313 天前
    @titanium98118
    @churchmice
    @illl 这个在只在自己的电脑是登录是没有问题的。如果是公用电脑,总不可能把私钥放上去把。
    我也考虑过堡垒机,万一堡垒机被日了呢。

    当然也用其他方法,比如 webssh ,但是这里只是讨论`sshd 使用不支持的加密套`的一种方法
    huahsiung
        12
    huahsiung  
    OP
       313 天前
    希望关注点不要在“ ssh 服务器是我手动实现的”这里

    毕竟我喜欢自己手动实现

    我使用的 Linux 的组件都被我替换完了。除了 sshd,还编写了一个 dhcp 客户端,替换了 isc-dhcp 。编写了一个 net 管理工具,替换了 systemd-networkd ,什么 NetworkManager ,systemd-resolved 全部被我自己的软件替换了,除了 systemd-udevd 等替换难度巨大的,其他基本都替换了。

    我 ss 也是自己实现的,我使用的 ss 移除了 aes 对称加密,使用我自研的对称加密,移除了默认的 hash ,改使用其他的 hash ,还改了默认的认证方式。也没有被封锁过任何 ip 和端口(可能是用的人少,只有我和朋友在用)

    希望大家不要过分关注“自己实现是最不安全的方式”这个论点,从某种程度来说,我现在在“以身试毒”。用来验证“自己实现才是最不安全的方式”的论点。什么时候我被黑客日了,我来吱一声
    churchmice
        13
    churchmice  
       313 天前 via Android
    @huahsiung 弄个加密 u 盘,密钥存那里面
    huahsiung
        14
    huahsiung  
    OP
       313 天前
    @churchmice 感谢你的建议,但是公用电脑我一般是 webssh 或者 novnc 。感觉这个好一点
    billccn
        15
    billccn  
       313 天前   ❤️ 2
    @huahsiung 虽然动手实践是很好的,但是也要注意 security by obscurity is not security 。

    你自编译的虽然抵挡了自动扫描,但是扫描器会把你这个奇葩的握手记下来,说不定哪一天有个友邦黑客大神无聊拿你做“科研”,这时候你没有及时升级 SSH 的其他部分就使你中招了。

    另外在不信任电脑上使用私钥的问题可以用智能卡解决,最方便的是 Yubikey ,在大多数电脑上免驱。
    eudemonwind
        16
    eudemonwind  
       312 天前 via Android
    感觉楼主这种改客户端的方法不适合大规模部署,对小白也不友好。一般人使用,对于安全还是循序渐进的找到适合自己的最好。

    比如:强密码 > 证书登陆 > 改端口 > Fail2ban > 防火墙白名单 > 各种隐藏端口的办法( vpn or and 端口敲门 or and 加密隧道 等等等等)
    huahsiung
        17
    huahsiung  
    OP
       312 天前
    @eudemonwind 我只是用我的程序做了给示例,实际上 openssh 也可以很轻松配置自定义加密套件,

    配置文件添加 vim /etc/ssh/sshd_config

    KexAlgorithms +diffie-hellman-group14-sha512 #指定密钥交换套件

    Ciphers [email protected],aes256-ctr #指定加密套件

    MACs hmac-sha256 #指定 hmac 算法

    差不多就算这样
    leonshaw
        18
    leonshaw  
       312 天前
    @billccn 理论跟实践还是有区别的。互联网上大部分扫描攻击都是针对已知漏洞广撒网,对一两个异常不会有兴趣,因为没什么收益。
    idealhs
        19
    idealhs  
       312 天前
    给哥们的动手精神点个赞
    但是我还是想说,自己写的不太可能强过现成的,所以我选择 sshd
    idealhs
        20
    idealhs  
       312 天前
    #15 说的很对,选择一个小众的加密协议不代表你就安全了,类似于 mac 没病毒这个说法
    你没挨打只是因为人家打你不是一片一片的打,不划算,如果有人专心想打你,你这个就可能是纸糊的
    正儿八经的 ssh 安全,还是要靠证书验证和限制访问 IP
    EricXuu
        21
    EricXuu  
       312 天前 via Android
    xuanbg
        22
    xuanbg  
       312 天前
    ip 白名单才是终极安全。哪怕你没有密码都安全得不得了。
    jinliming2
        23
    jinliming2  
       311 天前 via iPhone
    @xuanbg #22 要谈安全的话,IP 白名单也不是 100% 安全,如果你其他软件有漏洞,也可能在非白名单 IP 下对你实施攻击。
    没有密码都安全得不得了?你最好不要有这种想法。
    因为源 IP 是可以伪造的,这个是 DDoS 常用的手段之一,也是 DNS 污染使用的手段之一。但用来单点攻击的话效率太低收益太低,但如果针对性攻击的话,也是存在被利用的可能。
    假设你白名单只放行了 2.2.2.2 ,而我在 3.3.3.3 ,我只要伪造一个源地址为 2.2.2.2 的数据包就能过你的防火墙。虽然你的回包会发回给 2.2.2.2 ,我可能收不到,但是如果有其他漏洞的话,一个精心构造的包就可以利用了(甚至于你都没有密码),那实际上也就不关心回包内容了(有可能拿到你主动发过来的反弹 shell )。
    另外,如果攻击者控制了你回包的中间路由链路,比如某地区的出入口链路、或者在你家小区的 ISP ,那么回包的内容也是可以拿到的。

    另,我觉得终极安全是让攻击者看不到收益,对你发动攻击的性价比太低,以致于没人愿意攻击你,那才是最安全的。
    xuanbg
        24
    xuanbg  
       311 天前
    @jinliming2 源 IP 确实可以伪造,但伪造的 IP 不能建立有效的数据链路啊。所以,伪造源 IP 并不能通过 tcp 协议的 3 次握手,也就谈不上建立 ssh 链接了。

    当然,服务的漏洞确实可以利用,但这和 ssh 密码强度并没有关系。要想服务漏洞不影响系统安全,容器化就很轻易地解决了。在容器里的服务,漏洞也就影响这个容器而已。
    Masoud2023
        25
    Masoud2023  
       311 天前
    @jinliming2 #23 请教下 TCP 流量怎么伪造源 ip ,有没有相关资料?
    eudemonwind
        26
    eudemonwind  
       310 天前
    @EricXuu 快进到 2050 年 SSH 登录需要 密码+证书+二验+手机短信+人脸识别+指纹
    jinliming2
        27
    jinliming2  
       310 天前 via iPhone
    @xuanbg #24 TCP 三次握手仅仅依赖于 SYN 同步的序号。TCP 序号预测攻击,通过某种方式预测出你服务器响应的序号,然后给服务器发伪造的 ACK 即可。
    另外,如我上面所说,如果在骨干网上控制了网络路由的中间节点,比如国际、省级出入口,那么就不需要预测那么麻烦了,直接在中间路由上抓响应包就行。
    还有一点是,部分软件会监听 UDP 端口,如果有漏洞的话……

    另外,容器化也并非完全安全,容器逃逸也是漏洞挖掘的一个方向,容器内运行的程序逃逸到主机来执行代码。之前刷 CTF 的时候有道题就是在 Linux 下用 wine 虚拟化执行的 Windows 程序,要逃逸到主机执行 Linux 下的程序。

    总之,没有绝对的安全,只有提升攻击成本,降低攻击的收益,才能提高安全性。

    @Masoud2023 #25 简单了解一下网络数据包的结构,数据包里面包含源地址和目的地址,你只要修改一个数据包里的源地址就行了。
    Masoud2023
        28
    Masoud2023  
       310 天前
    @jinliming2 #27 那您能不能给我讲一下 OSI7 层模型中,IP 工作在哪一层?再在此基础上给我讲一下在 Internet 上伪造 IP 做 tcp 流量的 DDoS 怎么实现?
    jinliming2
        29
    jinliming2  
       310 天前 via iPhone   ❤️ 1
    @Masoud2023 #28 自己动手搜一下,很难吗?又不是啥高深的技术,伸手要的话,给你个关键词 IP address spoofing
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3245 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 13:09 · PVG 21:09 · LAX 06:09 · JFK 09:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.