为Linux服务器伪装上Windows系统假象

网络上的计算机很容易被黑客利用工具或其它手段进行扫描,以寻找系统中的漏洞,然后再针对漏洞进行攻击。
  通过伪装Linux系统,给黑客设置系统假象,可以加大黑客对系统的分析难度,引诱他们步入歧途,从而进一步提高计算机系统的安全性。下面以Red Hat Linux为例,针对几种黑客常用的途径介绍一些常用的Linux系统伪装的方法。
  针对HTTP服务
  通过分析Web服务器的类型,大致可以推测出操作系统的类型,比如,Windows使用IIS来提供HTTP服务,而Linux中最常见的是Apache。
  默认的Apache配置里没有任何信息保护机制,并且允许目录浏览。通过目录浏览,通常可以获得类似“Apache/1.3.27 Server at apach Port 80”或“Apache/2.0.49 (Unix) PHP/4.3.8”的信息。
  通过修改配置文件中的ServerTokens参数,可以将Apache的相关信息隐藏起来。但是,Red Hat Linux运行的Apache是编译好的程序,提示信息被编译在程序里,要隐藏这些信息需要修改Apache的源代码,然后,重新编译安装程序,以实现替换里面的提示内容。
  以Apache 2.0.50为例,编辑ap_release.h文件,修改“#define AP_SERVER_BASEPRODUCT \"Apache\"”为“#define AP_SERVER_BASEPRODUCT \"Microsoft-IIS/5.0\"”。编辑os/unix/os.h文件,修改“#define PLATFORM \"Unix\"”为“#define PLATFORM \"Win32\"”。修改完毕后,重新编译、安装Apache。
  Apache安装完成后,修改配置文件,将“ServerTokens Full”改为“ServerTokens Prod”;将“ServerSignature On”改为“ServerSignature Off”,然后存盘退出。重新启动Apache后,用工具进行扫描,发现提示信息中已经显示操作系统为Windows。针对FTP服务
  通过FTP服务,也可以推测操作系统的类型,比如,Windows下的FTP服务多是Serv-U,而Linux下常用vsftpd、proftpd和pureftpd等软件。
  以proftpd为例,修改配置文件nf,添加如下内容: 
 
  ServerIdent on \"Serv-U FTP Server v5.0 for WinSock ready...\"
  
  存盘退出后,重新启动proftpd服务,登录到修改了提示信息的FTP服务器进行测试:
  C:\\>ftp 192.168.0.1
  Connected to 192.168.0.1.
  220 Serv-U FTP Server v5.0 for WinSock ready...
  User (192.168.0.1:(none)):
  331 Password required for (none).
  Password:
  530 Login incorrect.
  Login failed.
  ftp > quit
  221 Goodbye.
  这样从表面上看,服务器就是一个运行着Serv-U的Windows了。
  针对TTL返回值
  可以用ping命令去探测一个主机,根据TTL基数可以推测操作系统的类型。对于一个没有经过任何网关和路由的网络,直接ping对方系统得到的TTL值,被叫做“TTL基数”。网络中,数据包每经过一个路由器,TTL就会减1,当TTL为0时,这个数据包就会被丢弃。通常情况下,Windows的TTL的基数是128,而早期的Red Hat Linux和Solaris的TTL基数是255,FreeBSD和新版本的Red Hat Linux的TTL基数是64。比如,ping一个Red Hat系统,显示如下: 
 
  Pinging 192.168.0.1 with 32 bytes of data:
  Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
  Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
  Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
  Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
  Ping statistics for 192.168.0.1:
  Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
  Approximate round trip times in milli-seconds:
  Minimum = 0ms, Maximum = 0ms, Average = 0ms
  用以下命令修改Red Hat Linux的TTL基数为128(本来为64):
  # echo 128 > /proc/sys/net/ipv4/ip_default_ttl
  
  若想使设置永久生效,可以修改/etc/nf配置文件,添加如下一行: 
 
  net.ipv4.ip_default_ttl = 128
  保存退出后,再ping 192.168.0.1,TTL基数就变为128了。
 针对3389端口和22端口
  有时通过扫描3389端口和22端口,也可以推测操作系统的类型。Windows下一般利用TCP协议的3389端口进行远程控制,而Linux可能会用TCP协议的22端口,提供带有加密传输的SSH服务。
  为了安全,可以利用iptables来限制22端口的SSH登录,让非授权的IP扫描不到TCP 22端口的存在:
  #iptables -I INPUT -s ! xx.xx.xx.xx -p tcp --dport 22 -j DROP
   
  利用iptables,将本机的TCP 3389端口转移到其它开有3389端口的计算机上,给Linux系统伪装出一个提供服务的TCP 3389端口。命令如下: 
 
  #echo 1 > /proc/sys/net/ipv4/ip_forward
  #iptables -t nat -I PREROUTING -p tcp --dport 3389 -j DNAT --to xx.xx.xx.xx
  #iptables -t nat -I POSTROUTING -p tcp --dport 3389 -j MASQUERADE

  第一条命令表示允许数据包转发;第二条命令表示转发TCP 3389到xx.xx.xx.xx;第三条命令表示使转发数据包实现“双向通路”,给数据包设置一个正确的返回通道。若想使转发永久生效,可以把以上命令添加到/etc/rc.local文件中。
  这样,当黑客扫描服务器所开端口的时候,就找不到22号端口,而是看到一个伪装的3389端口,从而不能正确判断出操作系统的类型。
  针对netcraft
  netcraft是一个很厉害的扫描引擎,它通过简单的TCP 80,就可以知道所测服务器的操作系统、Web服务程序和服务器开机时间(Uptime)等信息。
  上面介绍的几种方法对netcraft来说,均不奏效。针对netcraft,可利用iptables进行系统伪装,使netcraft错误判断操作系统:
  #iptables -t nat -I PREROUTING -s 195.92.95.0/24 
-p tcp --dport 80 -j DNAT --to xx.xx.xx.xx
  #iptables -t nat -I POSTROUTING -s 195.92.95.0/24 
-p tcp --dport 80 -j MASQUERADE
   
  由于通过抓包发现,netcraft的服务器不止一台,所以需要对它所在网段进行转发欺骗处理。
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

服务器伪装信息修改法

测试的服务器:redhat7.0,redhat7.1,mandrake7.1

本文主要讨论linux服务器的伪装,对于Sun、hp等可以查找相关资料,本文只提供思路。

前言:为什么要伪装?

动物伪装,为了逃避天敌,或为了更好的获取猎物。

人伪装,使你不知他的底细。

服务器伪装,目的是要使攻击者很难搜集到服务器真正的信息,使他的进一步攻击造成难度,进而起到一定的保护作用,当然还有更深的用法,等着你去发现。

声明:

本文只是本人研究的总结,是为了大家的学习研讨,请不要用到非法用途。

本人才疏学浅,不足及错误的地方请指出,mail地址:[email protected]。

正文:

1. Telnet信息伪装

首先看一次telnet过程:

[[email protected] yxg]$ telnet xx.xx.xx.xx

Trying xx.xx.xx.xx...

Connected to xxxx.

Escape character is ^].

Red Hat Linux release 7.1 (Seawolf)

Kernel 2.4.2-2 on an i686

login:

从中可以看到操作系统为Red Hat Linux release 7.1,内核版本2.4.2-2,计算机为:intel686。攻击者得到这些信息就可以用相应的攻击程序。所以我们不能告诉他们真正的情况。

telnet信息存放于/etc/issue.net

[[email protected] /etc]# cat issue.net

Red Hat Linux release 7.1 (Seawolf)

Kernel 2.4.2-2 on an i686

修改它成为你想要的任何字符,甚至什么也不要。

我的改为Sun的提示:

[[email protected] yxg]$ cat /etc/issue.net

SunOS 8.0

要注意必要的空行,改完和伪装的对象比较,直到一模一样才行。

对于本机的用户,提示信息在/etc/issue,改不改随你。

注意:如果你想重启后issue.net内容不变,修改/etc/rc.local,在这些行前加#

# This will overwrite /etc/issue at every boot. So, make any changes you

# want to make to /etc/issue here or you will lose them when you reboot.

# echo "" > /etc/issue

# echo "$R" >> /etc/issue

# echo "Kernel $(uname -r) on $a $SMP$(uname -m)" >> /etc/issue

# cp -f /etc/issue /etc/issue.net

# echo >> /etc/issue

2. ftp信息伪装

现在有很多对于wu-ftp的攻击程序,所以我就拿wu-ftp作例子。

先看一下ftp的过程:

[[email protected] yxg]$ ftp xx.xx.xx.xx

Connected to xxxx.

220 database FTP server (Version wu-2.6.1-16) ready.

如果想要不显示出wu-ftp,可以有多种方法。

其一:

察看in.ftpd就能发现版本号写在了程序中

[[email protected] /root]# strings /usr/sbin/in.ftpd

………………….

/var/log/lastlog

Could not write %.100s: %.100s

Version wu-2.6.1-16

你可以用16进制编辑器修改版本的字符串,改为proftp什么的,保准有人会上当。

其二:

/etc/ftpaccess里有两个参数

指示参数:greeting full | brief | terse

greeting text

允许控制远程用户登陆进来以后,给用户多少信息及信息内容。

banner

banner消息是在用户名和密码以前显示给用户的。

3. 修改telnet和ftp的默认端口号

有很多扫描器并不是逐个端口扫描的,所以来个乾坤大挪移来使扫描失效。

具体是修改/etc/services 或者是/etc/inetd.conf。

4. 操作系统指纹伪装

nmap等扫描器能通过操作系统指纹判断操作系统类型,所以我们要采取一些策略保护自己。现在有一些工具可以修改操作系统指纹,像fpf等,fpf可以在www.xfocus.org下载,它是一个lkm,加载到内核中,可以模拟很多操作系统。当然你可能要对源程序进行修改,也可以加入一些新的功能,如自动隐藏等。

5. 改装uname

如果不幸被一个攻击者闯入,它可以用uname来获取真正的操作系统信息,然后来个本地溢出,你就哭吧。

所以我们要修改uname的源程序,使它显示我们想要它显示的内容。

打开uname.c,找到如下行:

print_element (PRINT_SYSNAME, name.sysname);//操作系统名如linux

print_element (PRINT_NODENAME, name.nodename);//主机名

print_element (PRINT_RELEASE, name.release);//发行版本,如:2.2.16-22

print_element (PRINT_VERSION, name.version);//

print_element (PRINT_MACHINE, name.machine);//机器类型,如i686

print_element (PRINT_PROCESSOR, processor);//处理器类型

知道怎么改吧,不知道?提示一下,如果要显示操作系统为SunOS,替换第一行为:

print_element(PRINT_SYSNAME,"SunOS");

编译后,运行./uname –s,就会显示SunOS

当然你应该把每一项都进行修改,使人看不出破绽。

最后把改好的uname拷到/bin目录。

我在修改时还加了一个-Y的参数,目的是显示真正的信息,给自己看的。默认显示修改过的信息。

6. 其他一些杂项

建议你尽量关掉不必要的服务,对于开放的其他服务要仔细检查,使它不至于有泄密的信息。

不同操作系统的shell提示符也不太一样,尽量修改的和伪装目标一致。

结束语:

当然,要想保证服务器安全,这一点是远远不够的,它只能减小被攻击成功的概率。

如果更深一些,伪装成一个蜜罐子,来诱捕黑客,则不在本文的讨论范围之内。

--------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

修改Nginx的header伪装服务器

有时候为了伪装自己的真实服务器环境.
不像让对方知道自己的webserver真实环境,就不得不修改我们的webserer软件了!
今天看了一下baidu.com的webserver感觉像是nginx修改的.
C:/curl-7.18.0>curl.exe -I www.baidu.com
HTTP/1.1 200 OK
Date: Tue, 11 Mar 2008 05:00:39 GMT
Server: BWS/1.0
Content-Length: 3022
Content-Type: text/html
Cache-Control: private
Expires: Tue, 11 Mar 2008 05:00:39 GMT
Set-Cookie: BAIDUID=41BB2845D3E8BC1AEE99D4CECB90C50A:FG=1; expires=Tue, 11-
8 05:00:39 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "

哈只是感觉,人家有坚强的开发后盾,可能是自己开发的!

于是自己翻了一下nginx源码了,发现竟然很容修改就可以实现.
cd /usr/local/src/nginx-0.5.35/src/core/

[[email protected] core]# cat nginx.h

/*
* Copyright (C) Igor Sysoev
*/

#ifndef _NGINX_H_INCLUDED_
#define _NGINX_H_INCLUDED_

#define NGINX_VERSION    "1.0"   //型号
#define NGINX_VER       "LPKWS/" NGINX_VERSION //服务器名

#define NGINX_VAR       "LPKWS"
#define NGX_OLDPID_EXT     ".oldbin"

#endif /* _NGINX_H_INCLUDED_ */

测试效果
C:/curl-7.18.0>curl.exe -I 211.100.11.122/info.php   (此Nginx没有做优化,配置expires,gzip等,仅为测试)

HTTP/1.1 200 OK
Server: LPKWS/1.0
Date: Tue, 11 Mar 2008 04:53:02 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=20
X-Powered-By: PHP/5.2.4

----------------------------------------

-------------------------------------------------

修改apache的header伪装服务器

当客户端连接到Apache服务器的时候,Apache一般会返回服务器版本、非缺省模块等信息,例如:
Server: Apache/2.2.0 (Unix) mod_perl/1.26
解决:
你可以在Apache的配置文件里面作如下设置让它返回的关于服务器的信息减少到最少:
ServerTokens Prod
注意:
这样设置以后Apache还会返回一定的服务器信息,比如:
Server: Apache
但是这个不会对服务器安全产生太多的影响,因为很多扫描软件是扫描的时候是不顾你服务器返回的头部信息的。你如果想把服务器返回的相关信息变成:
Server: It iS a nOnE-aPaCHe Server
那么你就要去修改源码了。
方法:
代码:
修改几个Apache的几个源代码文件,然后自己编译

操作:
一、文件操作
file: include/ap_release.h

#define AP_SERVER_BASEVENDOR"这里填写开发组织名,例如:Microsoft Corp."
#defineAP_SERVER_BASEPRODUCT"这里填写服务器软件名,例如:Microsoft-IIS"
#defineAP_SERVER_MAJORVERSION "主版本,例如:5"
#defineAP_SERVER_MINORVERSION "次版本,例如:0"
#defineAP_SERVER_PATCHLEVEL "修正版本,例如:1"

file: os/os2/os.h

#define PLATFORM "这里填写操作系统的名称,例如:Win32"

二、编译操作
代码:
按照一般正常步骤编译安装

修改webserver的header伪装服务器

一般在Linux下查询一个网站链接返回的header信息,用

引用:

curl -I 链接

curl --head 链接

即可

好了开始正题
修改header信息
一、Apache

引用:

修改
include/ap_release.h

#define AP_SERVER_BASEVENDOR "Apache Software Foundation"
这里填写开发组织名,例如:Microsoft Corp.
#define AP_SERVER_BASEPROJECT "Apache HTTP Server"
这里填写服务器软件名
#define AP_SERVER_BASEPRODUCT "Apache"
这里填写服务器软件名
#define AP_SERVER_MAJORVERSION_NUMBER 2
主版本
#define AP_SERVER_MINORVERSION_NUMBER 2
次版本
#define AP_SERVER_PATCHLEVEL_NUMBER   14
修正版本

修改
os/os2/os.h

#define PLATFORM "OS/2"
这里填写操作系统的名称

二、Nginx

引用:

两种方法任选其一即可
1、修改
src/core/nginx.h
2、修改
src/http/ngx_http_header_filter_module.c

static char ngx_http_server_string[] = "Server: nginx" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

三、IIS

引用:

需要用16进制编辑器编辑
SYSTEM32/INETSRV/W3SVC.DLL

四、Tomcat 6.0.20

引用:


java/org/apache/coyote/http11/Constants.java

java/org/apache/coyote/ajp/Constants.java
这两个文件中查找
public static final byte[] SERVER_BYTES =
ByteChunk.convertToBytes("Server: Apache-Coyote/1.1" + CRLF);
然后修改红色部分

五、Cherokee

引用:

修改
cherokee/version.c
中包含有
Cherokee web server
的部分

为Linux服务器伪装上Windows系统假象

时间: 2024-09-30 18:17:15

为Linux服务器伪装上Windows系统假象的相关文章

linux服务器批量部署应用系统shell脚本(Tomcat/jetty)

linux服务器批量部署应用系统shell脚本: 1.请更换代码内的服务器地址(Tomcat或jetty服务器) serverRoot=/home/undoner/java_tool/apache-tomcat-7.0.61 serverDir=/home/undoner/java_tool/apache-tomcat-7.0.61/webapps 2.请更换工程所属配置文件名称 /WEB-INF/classes/install.properties 3.请将war包上传至本命令同级的目录,执行

Linux服务器文件和windows本机文件互传方法(本地文件上传Linux,Linux文件下载到本机)

1.windows系统中下载XShell安装文件.下载地址:https://www.newasp.net/soft/384562.html 2.安装之后,新建会话输入远程linux的账号和密码. 3.上传文件:在shell终端仿真器中输入命令rz,即可从本机选择文件利用Zmodem上传到服务器当前路径下. 4.下载文件:在shell终端仿真器中输入命令sz 文件名,即可利用Zmodem将文件下载到本地某目录下. 原文地址:https://www.cnblogs.com/qqflying/p/10

从Linux服务器下载上传文件

首先要确定好哪两种的连接:Linux常用的有centors和unbantu两种版本,PC端Mac和Windows 如果在两个Linux之间传输,或Linux和Mac之间传输可以使用scp命令,类似于ssh连接 无论从本地复制到远程还是远程复制到本地,命令都是在本地书写的 不同的Linux之间copy文件常用有3种方法: 第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以另外一台使用ftp的client程序来进行文件的copy. 第二种方法就是采用samba服务,类似Wi

linux服务器网站到windows服务器的一次迁移

原先一个网站在linux服务器上所用的web服务为nginx+mysql+php,由于各种原因需要迁移到Windows服务器上. 前期做的准备 1,PHP和MySQL的版本 2,网站大小和类型 3,数据库大小 由于网站过于巨大90G,而linux服务器上磁盘空间不够无法压缩,最后我选择的办法是使用FTP传,没想到什么好办法.此过程话费一周的事件下载完成. 此网站的数据库大小共2G多,其中有一个网站的MySQL数据库竟然达到1.9G,并且导出的sql文件大小也在1.3G,其他几个都是小网站数据库不

mac通过自带的ssh连接Linux服务器并上传解压文件

需求: 1:mac连接linux服务器 2:将mac上的文件上传到linux服务器指定位置 3:解压文件 mac上使用命令,推荐使用 iterm2 .当然,也可以使用mac自带的终端工具. 操作过程: 一: mac连接linux服务器 输入命令连接Linux服务器: ssh [email protected] 其中: username为登录Linux服务器所需的用户名,ip为服务器的地址.默认端口号为22,如果要指定端口号,使用 -p port // 以下两种方式都可以 ssh [email p

VMware 上windows 系统密码忘记修改方法

* 1.下载PE,ISO本版本的(带密码破解软件) * 2.上传PE ISO 至虚拟机服务器 * 3.关闭windows虚拟机 * 4.点击编辑虚拟机设置 * 5.点击硬件,点击CD/DVD驱动器,勾选数据存储ISO文件,点击浏览选择上传的PE ISO文件 * 6.点击选项,勾选强制执行BIOS设置,点击确定 * 7.开启windows虚拟机 * 8.在BIOS设置界面的BOOT栏使用 +/- 号将CD-ROM选项调整至第一的位置,然后F10保存并退出 * 9.进入PE 选择密码破解,选择系统盘

尝试在阿里云的Linux服务器器上安装拥有图形界面的Pycharm

在Linux服务器上跑Python项目发现每次从本地上传文件太过麻烦,于是打算在服务器上安装Pycharm直接写Pycharm代码.   去Pycharm的官网下载Linux版本(支持正版于是我下载了社区版) 在服务器上建立一个名为Pychar文件. 通过winSCP软件吧刚刚下载好的Linux版本的Pycharm上传到服务器的Pycharm文件夹 解压文件 tar xfz pycharm-community-2019.3.3.tar.gz 然后打开Pycharm文件下的bin 输入命令运许bi

Linux服务器--CentOS6上源码安装LAMP(实现WordPress,PhpMyAdmin)

Linux服务--CentOS6实现LAMP(源码安装) 实验要求: 安装php时实现php模块嵌入到httpd中和实现fpm两种方式.在fpm下,提供两个虚拟主机: 分别用于实现PHPMyadmin和WordPress,其中PhpMyAdmin提供ssl. 实验环境: CentOS系统一台(IP:172.16.99.4),所需的httpd,mariadb,php,PhpAdmin,WordPress的源码包. 实验步骤: 安装顺序:httpd-->mariadb-->php. 安装前的准备工

推荐两款远程管理Linux工具(基于Windows系统)

1.Xshell 百度百科:Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议.Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的. 比如我们使用CentOS(社区企业操作系统)的时候,如果没有终端模拟软件,那么我们一般是通过 Open in Terminal 去打开终端. 但是如果我们有了xshell这款强大的工具后, 我们可以在xshell这款工具中去