• linux安全


    http://drops.wooyun.org/  最专业的安全知识分享平台

    http://www.freebuf.com/  关注黑客与极客

    http://book.beifabook.com/product/BookDetail.aspx?Plucode=712105019        Linux安全体系分析与编程目录

    最佳的策略是采用分层的方法,即将“老当益壮”的程序,如Snort、 iptables等老前辈与psad、Apparmor、SELinuxu等一些新生力量结合起来,借助强大的分析工具,我们就可以始终站在技术的前沿。

    IDS新宠:PSAD。Psad是端口扫描攻击检测程序的简称,它作为一个新工具,可以与iptables和Snort等紧密合作,向我们展示所有试图进入网络的恶意企图。
    老当益壮:Snort。它是一款轻量级且易于使用的工具,可以独立运行,也可以与psad和iptables 一起使用
    简洁方便:chkrootkit和rootkit。Rootkit检测程序chkrootkit和rootkit Hunter也算是老牌的rootkit检测程序了
    多面手:Tripwire。Tripwire是一款入侵检测和数据完整性产品

    CGI漏洞

    CGI是Common Gateway Interface(公用网关接口)的简称,并不特指一种语言。
    Web服务器的安全问题主要包括:1)Web服务器软件编制中的BUG;2)服务器配置的错误。可能导致CGI源代码泄漏,物理路径信息泄漏,系统敏感信息泄漏或远程执行任意命令。CGI语言漏洞分为以下几类:配置错误、边界条件错误、访问验证错误、来源验证错误、输入验证错误、策略错误、使用错误等等。CGI漏洞大多分为一下几种类型:暴露不该暴露的信息、执行不该执行的命令、溢出。


    一次利用show files类cgi漏洞成功入侵uta.edu的经历

    http://www.chinaunix.net/bbsjh/19/23.html  cgi漏洞利用

    httpd的error_log分析

    [Mon Apr 06 04:45:39 2015] [error] [client 46.28.206.148] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /
    [Mon Apr 06 04:56:57 2015] [error] [client 70.46.57.98] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /tmUnblock.cgi
    [Mon Apr 06 04:57:01 2015] [error] [client 70.46.57.98] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /
    [Tue Apr 07 01:18:45 2015] [error] [client 97.91.223.228] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /tmUnblock.cgi
    [Tue Apr 07 01:18:49 2015] [error] [client 97.91.223.228] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /

    第一步获取域名与ip关系

    [Tue Apr 07 11:32:01 1010 /dev/pts/0 192.168.2.250 ~]#ping www.fltdz.com
    PING www.fltdz.com (58.64.136.166) 56(84) bytes of data.
    64 bytes from 58.64.136.166: icmp_seq=1 ttl=48 time=79.6 ms
    64 bytes from 58.64.136.166: icmp_seq=2 ttl=48 time=76.2 ms
    64 bytes from 58.64.136.166: icmp_seq=3 ttl=48 time=63.2 ms
    ^C
    --- www.fltdz.com ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2245ms
    rtt min/avg/max/mdev = 63.245/73.044/79.639/7.069 ms

    第二步请出瑞士军刀nc(netcat)
    [Tue Apr 07 11:32:47 1011 /dev/pts/0 192.168.2.250 ~]#yum install nc

    我用get / http/1.1来取得他的webserver的相关信息
    [Tue Apr 07 11:32:47 1011 /dev/pts/0 192.168.2.250 ~]#nc -vv 58.64.136.166 80
    Connection to 58.64.136.166 80 port [tcp/http] succeeded!
    输入下面,然后两次回车
    GET / HTTP/1.1

    HTTP/1.1 400 Bad Request
    Server: nginx/1.0.2
    Date: Tue, 07 Apr 2015 03:43:36 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: close

    ac
    <html>
    <head><title>400 Bad Request</title></head>
    <body bgcolor="white">
    <center><h1>400 Bad Request</h1></center>
    <hr><center>nginx/1.0.2</center>
    </body>
    </html>

    0

    [Tue Apr 07 11:33:59 1012 /dev/pts/0 192.168.2.250 ~]#

    第三步由于信息量太少请出扫描器之王nmap
    [Tue Apr 07 11:46:16 1015 /dev/pts/0 192.168.2.250 ~]yum install nmap
    [Tue Apr 07 11:46:16 1015 /dev/pts/0 192.168.2.250 ~]#nmap -sS -O -vv 192.168.2.2

    Starting Nmap 5.51 ( http://nmap.org ) at 2015-04-07 11:46 CST
    Initiating ARP Ping Scan at 11:46
    Scanning 192.168.2.2 [1 port]
    Completed ARP Ping Scan at 11:46, 0.00s elapsed (1 total hosts)
    Initiating Parallel DNS resolution of 1 host. at 11:46
    Completed Parallel DNS resolution of 1 host. at 11:46, 0.09s elapsed
    Initiating SYN Stealth Scan at 11:46
    Scanning 192.168.2.2 [1000 ports]
    Discovered open port 111/tcp on 192.168.2.2
    Discovered open port 22/tcp on 192.168.2.2
    Discovered open port 5500/tcp on 192.168.2.2
    Discovered open port 5801/tcp on 192.168.2.2
    Discovered open port 5666/tcp on 192.168.2.2
    Discovered open port 10000/tcp on 192.168.2.2
    Discovered open port 5901/tcp on 192.168.2.2
    Discovered open port 2049/tcp on 192.168.2.2
    Discovered open port 1521/tcp on 192.168.2.2
    Discovered open port 6001/tcp on 192.168.2.2
    Discovered open port 10003/tcp on 192.168.2.2
    Discovered open port 80/tcp on 192.168.2.2
    Completed SYN Stealth Scan at 11:46, 1.10s elapsed (1000 total ports)
    Initiating OS detection (try #1) against 192.168.2.2
    Retrying OS detection (try #2) against 192.168.2.2
    Retrying OS detection (try #3) against 192.168.2.2
    Retrying OS detection (try #4) against 192.168.2.2
    Retrying OS detection (try #5) against 192.168.2.2
    Nmap scan report for 192.168.2.2
    Host is up (0.00023s latency).
    Scanned at 2015-04-07 11:46:25 CST for 13s
    Not shown: 988 closed ports
    PORT      STATE SERVICE
    22/tcp    open  ssh
    80/tcp    open  http
    111/tcp   open  rpcbind
    1521/tcp  open  oracle
    2049/tcp  open  nfs
    5500/tcp  open  hotline
    5666/tcp  open  nrpe
    5801/tcp  open  vnc-http-1
    5901/tcp  open  vnc-1
    6001/tcp  open  X11:1
    10000/tcp open  snet-sensor-mgmt
    10003/tcp open  documentum_s
    MAC Address: E4:1F:13:80:ED:2C (IBM)
    No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/ ).
    TCP/IP fingerprint:
    OS:SCAN(V=5.51%D=4/7%OT=22%CT=1%CU=34628%PV=Y%DS=1%DC=D%G=Y%M=E41F13%TM=552
    OS:3531E%P=x86_64-redhat-linux-gnu)SEQ(SP=108%GCD=1%ISR=109%TI=Z%CI=Z%II=I%
    OS:TS=A)OPS(O1=M5B4ST11NW7%O2=M5B4ST11NW7%O3=M5B4NNT11NW7%O4=M5B4ST11NW7%O5
    OS:=M5B4ST11NW7%O6=M5B4ST11)WIN(W1=16A0%W2=16A0%W3=16A0%W4=16A0%W5=16A0%W6=
    OS:16A0)ECN(R=Y%DF=Y%T=40%W=16D0%O=M5B4NNSNW7%CC=N%Q=)T1(R=Y%DF=Y%T=40%S=O%
    OS:A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=Y%DF=Y%T=40%W=16A0%S=O%A=S+%F=AS%O=M5B4ST1
    OS:1NW7%RD=0%Q=)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=4
    OS:0%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%
    OS:Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T=40%IPL=16
    OS:4%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%CD=S)

    Uptime guess: 39.383 days (since Fri Feb 27 02:34:52 2015)
    Network Distance: 1 hop
    TCP Sequence Prediction: Difficulty=264 (Good luck!)
    IP ID Sequence Generation: All zeros

    Read data files from: /usr/share/nmap
    OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
    Nmap done: 1 IP address (1 host up) scanned in 12.87 seconds
               Raw packets sent: 1103 (52.326KB) | Rcvd: 1076 (46.626KB)
    [Tue Apr 07 11:46:38 1016 /dev/pts/0 192.168.2.250 ~]#

    linux安全手段

    1 改名,强密码,改端口,开防火墙
    2 组策略,ipsec策略
    
     
    1、用chattr命令防止系统中某个关键文件被修改
    # chattr +i /etc/fstab 
    然后试一下rm mv rename等命令操作于该文件,都是得到Operation not permitted 的结果
    2、让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作
    # chattr +a /data1/user_act.log
    3、不能修改root密码
    lsattr /etc/passwd /etc/shadow
    chattr -i /etc/passwd 
    chattr -i /etc/shadow    再修改root的密码就可以
    chattr +i /etc/passwd
    chattr +i /etc/shadow
    
    策略与手段
    1.对目录设置粘滞位限定用户只能对自己的文件进行处理 stick bit
    2.对文件设置setuid可以让执行该命令的用户以该命令拥有者的权限去执行,setuid使用不是无限制的。出于安全目的,只能应用在Linux  ELF格式二进制文件上,而不能用于脚本文件。
    3.防止某个文件被修改  chattr
    4.安全分区与只读分区  mount -o remount,noexec,ro
    5.root无法远程登录    手段有三个
    6.操作机,机房与公司,全部通过公钥认证,避免密码泄漏
    7.一律在win中cmd界面,用命令,这样不会有记录
    
    
    
    想限制root在指定终端登录。如下做后,无法登录。
    1、在 /etc/pam.d/sshd  添加  auth            required        pam_securetty.so
    2、在/etc/securetty 中添加
    pts/0
    pts/1
    依然无法用root登录ssh服务器。
    PS:我的系统是arch。注释掉/etc/pam.d/sshd中的 pam_securetty.so,可以登录。
    
    vim /etc/ssh/sshd_config
    #PermitRootLogin yes
    找到这一行,去掉注释。
    改为
    PermitRootLogin no
    service sshd restart
    
    我们经常使用SSH登录管理服务器,在享受便利的同时也会遇到一些安全隐患,最常见的就是SSH密码被暴力破解。如果我们将SSH密码设置的过于复杂,又不容易记,因此限制SSH登录方式,只能使用key登录是一个不错的选择,既可以保证安全性,又非常方便。具体的修改方式如下:
    1、添加信任key,并测试能否不通过密码直接登录
        将公钥信息加入用户目录的SSH认证key文件下。(linux下可以用ssh-keygen命令生成,windows下可以用SecureCRT等工具生成)
        比如,将如下格式的公钥信息拷贝到/root/.ssh/authorized_keys
         ssh-rsa AAAAB3.....H+5w== hujiankang@qiyi.com
        此时,带有对应私钥的机器就已经拥有了访问该机器root账户的权限。
        
        完成配置后,请采用带对应私钥的机器访问服务器,如果不提示输入password,直接登录,则证明配置正确。
     
    2、修改SSH配置文件并重启SSH服务
        SSH配置文件的位置:/etc/ssh/sshd_config
        找到其中的两个参数配置:
    PasswordAuthentication
    ChallengeResponseAuthentication
        将这两个参数值修改为no:
    PasswordAuthentication no
    ChallengeResponseAuthentication no
        然后重启SSH服务。
    # service sshd restart
        现在我们就已经限制用户的SSH登录方式,只允许用key方式登录。
        进一步测试,如果我们用一台不带信任key的机器尝试登录,那么会提示如下信息。
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
        证明限制SSH登录方式成功。
    
    
    
    可以说sudo命令补偿了它的一个致命缺陷,那就是任何一个想转为root用户的人都得掌握root用户的密码
    
    linux安全设置
    
    1.删除所有那些不能在你系统上使用的默认用户和组账户: lpsync,shutdown,halt, news, uucp, operator, games, gopher
    
    2.ROOT自动从shell注销,编辑你的配置文件”vi /etc/profile”,在某个地方加入如下行,
    “HISTFILESIZE=”
    TMOUT=3600
    我们为变量”TMOUT=”输入的这个值使用秒表示的、代表一个小时(60*60=3600秒)。如果你将此行加入你的“/etc/profile” 文件,那么在一小时的
    非活动状态之后将要系统里的所有用户自动注销。你可以在用户私人的”.bashrc”文件里面设置这个变量,可以在一个确定的时间以后自动注销他们。
    
    3.禁止并且卸载所有没有用的服务
    你必须禁止一切卸载所有你不用的的服务,那样的话,你就能少担心一些。看看你的”/etc/inetd.conf”文件,用注释的方法禁用(在一行的开始加个#),
    然后给inetd进程发送一个SIGHUP命令去更新到当前的”inetd.conf”文件。这样做:
    第一步把”/etc/inetd.conf”更改许可权限成600,那样的话,就只有root可以读和写。
    [Root@kapil /]# chmod 600 /etc/inetd.conf
    第二步确保”/etc/inetd.conf”的所有者是root。
    第三步编辑inetd.conf文件(vi /etc/inetd.conf),并且禁止一些服务,就像:ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger, auth等等,
    除非你打算用它。关闭这些服务就降低一些风险。
    第四步给你的inetd进程发送一个HUP信号
    [root@kapil /]# killall -HUP inetd
    第五步设置”/etc/inetd.conf”文件为不可更改,使用 chattr 命令,这样的话,没人能修改那个文件。简单的设置文件为不可更改,执行如下命令:
    [root@kapil /]# chattr +i /etc/inetd.conf
    这将防止对”inetd.conf”文件的任何更改(意外的更改或者其他更改)。只有超级用户root能设置或者清除这个文件属性。修改inetd.conf 简单的取消不可更改的设置,执行如下命令:
    [root@kapil /]# chattr -i /etc/inetd.conf
    
    4.免疫”/etc/services”文件
    你必须免疫 “/etc/services” 文件,防止未经授权的删除、增加服务。
    免疫 “/etc/services” 文件,使用命令:
    [root@kapil /]# chattr +i /etc/services
    
    5.禁止Control-Alt-Deletc键盘关机命令
    在你的”/etc/inittab”文件里面注释掉如下的行(用一个”#”)。
    编辑inittab文件(vi /etc/inittab),
    更换:
    ca::ctrlaltdel:/sbin/shutdown -t3 -r now
    读入:
    #ca::ctrlaltdel:/sbin/shutdown -t3 -r now
    现在,按照如下提示输入,让更改生效:
    [root@kapil /]# /sbin/init q
    
    6.为脚本文件整理”/etc/rc.d/init.d”下的权限
    整理脚本文件的许可权限,可靠的开始和结束所有你需要在引导时运行的常态进程,这样做:
    [root@kapil/]# chmod -R 700 /etc/rc.d/init.d/*
    这意味着只有root可以被允许读,写,和执行目录里面的脚本文件。
    
    7.隐藏你的系统信息
    默认状态下,当你登录到linux机器时,他告诉你Linux分布商的名字,版本,核心版本和服务器名字。这对一个骇客来说从你的服务器得到这些信息足够了,所以必须立刻用一个”Login:”提示符提示用户。
      第一步
      这样做,编辑”/etc/rc.d/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 $(uname -m)” >;>; /etc/issue
      #
      #cp -f /etc/issue /etc/issue.net
      #echo >;>; /etc/issue
      第二步
      然后,删除如下文件:在”/etc/”目录下的”issue.net” 和 “issue”:
      [root@kapil /]# rm -f /etc/issue
      [root@kapil /]# rm -f /etc/issue.net
    
    8.禁止未用的 SUID/SGID 程序
      一个常规用户如果设置为SUID root,将能够作为root运行程序。一个系统管理员必须最小化使用这些 SUID/GUID程序,而且禁止那些不需要的程序。
      第1步
      从root拥有的程序里发现所有有`s’位的程序,用此命令:
      [root@kapil]# find / -type f ( -perm -04000 -o -perm -02000 ) -exec ls -lg {} ;
      在被选中的程序上禁止suid 位,键入如下命令:
      [root@kapil /]# chmod a-s [program]
      
    9.关闭ipv6
      vi /etc/modprobe.conf,在文件中添加以下两行
      alias net-pf-10 off
      alias ipv6 off
    我怎样才能区分程序是否使用了PAM验证?
      使用ldd命令,如果这个程序的使用的动态连接库没有libpam和libpam_misc,那它肯定不使用PAM验证。然而,还有可能已经包含这两个库了,但是因为某些问题,程序无法正常工作。因此需要更好的方法来测试。
      对于需要使用PAM的程序,需要在/etc/pam.d目录中为其设置配置文件。配置文件的名字被编写进程序源代码中,通常和程序的名字是一样的,但不总是这样。例如:有个程序叫作pamprog,它的PAM配置文件是/etc/pam.d/pamprog。在配置文件中,只有下面两行: 
    	auth required pam_permit.so
    	auth required pam_warn.so
      现在对其进行测试。第一行,表示所有的用户都允许通过;第二行表示想syslog中写入一条警告信息。如果测试成功,就表示程序能够使用PAM进行验证。然后你可以在配置文件中加入更为复杂的验证功能。
    
    
    [root@84-monitor ~]# ldd /usr/bin/passwd|grep pam
            libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x00007fdfac008000)
            libpam.so.0 => /lib64/libpam.so.0 (0x00007fdfab620000)
    [root@84-monitor ~]# ldd /bin/login|grep pam
            libpam.so.0 => /lib64/libpam.so.0 (0x00007f7d4c9d8000)
            libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x00007f7d4c7d0000)
    [root@84-monitor ~]# ldd /usr/sbin/sshd|grep pam
            libpam.so.0 => /lib64/libpam.so.0 (0x00007f20629b8000)
    [root@84-monitor pam.d]# ldd /usr/sbin/crond|grep pam
            libpam.so.0 => /lib64/libpam.so.0 (0x00007f6095e38000)

  • 相关阅读:
    IOS总结_IOS经常使用的方法集合、调用系统电话、设备区分、APP内永不锁屏
    huffman编码——原理与实现
    python字典构造函数dict(mapping)解析
    tomcat配置sqlserver数据库
    Tomcat全攻略
    第一次QQ群视频教育有感
    UIControl-IOS开发
    java内存分析总结
    Android笔记 之 旋转木马的音乐效果
    Android中API建议的方式实现SQLite数据库的增、删、改、查的操作
  • 原文地址:https://www.cnblogs.com/createyuan/p/4292521.html
Copyright © 2020-2023  润新知