精华内容
下载资源
问答
  • 很多人都知道Linux比Windows安全,但却不知道安全在哪儿。Linux是一款怎样的系统? 与Windows相比,安全体现在哪些地方?今天我们一起来探讨一下。 什么是Linux? Linux操作系统诞生于1991 年10 月5 日(这是第一...

    很多人都知道Linux比Windows安全,但却不知道安全在哪儿。Linux是一款怎样的系统?

    与Windows相比,安全体现在哪些地方?今天我们一起来探讨一下。

    什么是Linux?

    Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统。

    Linux主要应用于服务器,也有桌面操作系统,比如redhat、ubuntu等等发行版。但是用的人相对较少,一般是专业用户在用。而Windows则在桌面操作系统的市场拥有着绝对的优势。

    为什么总说Linux比Windows安全?

    | Windows市场占有率大,树大招风

    操作系统的安全性可能很大程度上依赖于装机用户量的规模。

    我们先来看看两者的市场占比。根据市场研究公司NetMarketShare的数据显示,2018年互联网上87.92%的电脑运行着 Windows 的某个版本,只有2.03%的PC电脑运行的是Linux操作系统

    NetMarketShare的数据截图

    如果你是黑客,你会选择攻击市场占有率接近90%的Windows,还是去攻击只占市场百分之二的Linux系统呢?对于恶意软件作者来说,Windows 提供了大的施展平台。专注其中可以让他们的努力发挥最大作用。

    就像 Troy Wilkinson,Axiom Cyber Solutions 的 CEO 解释的那样,“Windows 总是因为很多原因而导致安全性保障来的最晚,主要是因为消费者的采用率。由于市场上大量基于 Windows 的个人电脑,黑客历来最有针对性地将这些系统作为目标。”

    树大招风,可以说是Windows被攻击的一个无可避免的原因。从梅丽莎病毒到 WannaCry 或者更强的,许多世界上已知的恶意软件早已对准了 Windows 系统。

    | Linux发行版本较多,难集中攻击

    Linux 环境下的多样性可能比典型的 Windows 单一文化更好地对抗攻击。

    Windows的系统环境可以说是千篇一律。这种巨大的一致性让攻击者们在编写恶意代码、病毒时显得得心应手。反过来,在Linux的系统世界,应用程序可以是.deb、.rpm,或源代码等等。而Linux也有很多的发行版:redhat、ubuntu等等。这种差异性让攻击者们很难在Linux系统身上获得像Windows系统那样的广泛影响。因此攻击者攻击Linux系统的积极性相对不高。

    | Linux用户权限划分令风险降低

    Windows 用户一般被默认授予管理员权限,那意味着他们几乎可以访问系统中的一切。这时候一旦有程序被入侵,那入侵者基本上就能进入电脑的每一个角落。

    Linux,反而很好地限制了“root”权限。Linux系统天生就被设计成一个多用户的操作系统。而使用者绝大多数情况下处于一个非系统管理员(ROOT)的情况下,所以即使这时候运行的软件被入侵,也能很好的保护系统程序和其他用户文件的安全。假如有任何远程的恶意代码在系统中被执行了,它所带来的危害也将被局限在一个小小的局部之中。

    | Linux代码开源,漏洞有多人解决

    Linux的代码是开源的,任何人都可以查看它,并确保没有错误或后门。任何可能的软件漏洞,都可能有成千上万的人能够看到,通过群策群力,问题通常得以快速解决,在这里没有任何被隐藏的修复措施。微软可能会吹捧它的大型的付费开发者团队,但团队不太可能与基于全球的 Linux 用户开发者进行比较。

    而Windows系统有很多安全问题是不会让外界所知晓的,虽然这样做可以让被公开的软件漏洞数目更少,避免漏洞被大规模地利用,但这种做法也会让用户掉以轻心。由于用户不清楚系统存在着什么样的漏洞,以及漏洞的严重性,很可能不会及时地对系统进行升级,结果反而会受到恶意攻击。

    Linux因其稳定、开源、免费、安全、高效的特点,发展迅猛。未来Linux在服务器领域的发展一定不可小觑。而基于Linux内核的桌面操作系统,相信以后也会得到更为广泛的使用!

    中兴新支点桌面操作系统

    而在国产操作系统方面,中兴新支点操作系统是做得比较领先的,基于Linux这一内核,界面友好,操作简单,易于上手,应用软件也日趋丰富,已能满足你日常的办公学习需求。

    其实无论哪种系统,都没有绝对的安全。你必须时刻牢记,系统的安全性最终还是掌握在用户手中的。人才是系统安全的核心,养成安全、良好的用户习惯是关键!

    展开全文
  • 一、写在前面的话最近勒索病毒让大家谈“毒”色变,好像上网都不敢上了,于是就有了这篇文章,对比一下windows不同版本操作系统的安全性,本次对win10进行安全渗透测试。二、实验测试环境渗透机:Kali Linux-2018.2 ...

    一、写在前面的话
    最近勒索病毒让大家谈“毒”色变,好像上网都不敢上了,于是就有了这篇文章,对比一下windows不同版本操作系统的安全性,本次对win10进行安全渗透测试。
    二、实验测试环境
    渗透机:Kali Linux-2018.2 (192.168.64.130)
    靶机:windows10 1709 (192.168.64.129)
    实验在VMware Workstation14下运行
    网络配置采用NAT

    image


    为了保证实验系统的纯净性,排除第三方篡改导致的系统安全威胁,特下载官方镜像进行安装,首先使用渗透机对靶机进行ping测试,发现只有当关闭防火墙时才可ping通,**由此提醒大家,windows提供的自带防火墙是比较有效的,对于大规模网络扫描是有保护作用的。
    **由于桥接模式只是对虚拟机的IP分配方式不同,经测试,在连通性方面,与NAT相似,同样是关闭防火墙才可ping同,在此不再赘述。为了对极端安全性进行测试,关闭了windows自带的杀毒软件以及病毒检测。

    image


    三、实验流程
    1.使用ms17-010扫描模块,对靶机进行扫描

    image


    从截图可知,扫描模块无法对win10靶机的445端口进行攻击,由此报错,无法进行攻击。
    四、总结
    即使在win10 1709最新版本关闭防火墙的情况下,在没有安装第三方杀毒软件及关闭windows自带的杀毒检测情况下,依然无法进行攻击,因此,保持系统为最新状态是至关重要的,大家不用对勒索病毒过于担心,保持良好的安全使用习惯,打开防火墙,必要时安装第三方杀软,即使注意微软的相关更新提示,保持系统的最新状态,这样,大部分黑客就挡在外面了。
    由于之前对win7系统成功进行渗透测试,后续会对win7以及主流杀毒软件的防护功能进行评测,在此谢谢大家捧场。
    展开全文
  • 由于现在大众对win7认可度和接受度较高,用户数量庞大,基于之前对win7系统成功进行渗透测试,本次会对win7以及主流杀毒软件防护效果进行简单测试。二、实验测试环境渗透机:Kali Linux-201...

    一、写在前面的话
    在上篇中介绍了win10-1709版本,对勒索病毒攻击的445端口进行了简单的渗透测试,这与微软公布的win10未受到攻击的情况相符。由于现在大众对win7的认可度和接受度较高,用户数量庞大,基于之前对win7系统成功进行渗透测试,本次会对win7以及主流杀毒软件的防护效果进行简单测试。
    二、实验测试环境
    渗透机:Kali Linux-2018.2 (192.168.64.130)
    靶机:windows7家庭普通版 (192.168.64.131)
    windows7企业版SP1(192.168.64.132)

    实验在VMware Workstation14下运行
    网络配置采用NAT

    image


    为了保证实验系统的纯净性,排除第三方篡改导致的系统安全威胁,特下载官方镜像进行安装.
    三、实验流程
    1. 在实验首先进行连通性测试,发现默认开启防火墙的情况下,依然无法ping通靶机,因此关闭防火墙进行测试
    2. 使用ms17-010扫描模块,对靶机进行扫描

      image

    从截图可以发现,扫描模块发现win7 存在漏洞,而且测试工具可以获取到系统的版本信息

    3.使用ms17-010渗透模块对靶机进行渗透
    执行渗透

    image


    成功拿shell !

    4.通过shell对靶机进行控制
    创建控制角色账户前先查看系统现有的用户名

    image


    可以查看到系统只有一个名为test的管理员账号

    现在通过shell创建用户名123密码123
    查看用户是否创建成功

    image


    注销系统,测试账号是否可以使用

    image

    image

    输入密码,可以正常登陆
    但由于是标准用户,所以更改账户是有权限限制的

    image


    现对用户123进行提权,达到管理员权限

    image


    注销后重新登陆,发现用户123已经授予了管理员权限

    由于家庭普通版不支持远程桌面,也无法被黑客利用,因此在安全性方面,家庭普通版较高(对,你没看错,连我自己都吓了一跳)

    下面转到另一靶机
    windows7企业版SP1(192.168.64.132)

    image


    拿shell后创建用户123,用户提权,开启远程桌面(开放3389端口)远程桌面连接win7
    创建用户
    将用户加入管理组
    开启远程桌面(开放3389端口)
    连接win7
    image

    成功远程连接

    5.漏洞修复
    创建快照利于恢复

    微软官方漏洞补丁

    image


    发现安装完官方发布的补丁,无法扫描到漏洞,也无法拿shell。
    金山毒霸

    image

    安装后开启安全防御,发现第一次代码执行失效,但第二次还是成功拿shell

    image


    依然可以执行代码并远程连接
    病毒库截至目前是2018,5,02,版本
    试试安装补丁与扫描看防御是否生效

    image


    image


    并没有查杀到漏洞

    image


    查杀结束后测试依然未生效,依然可拿shell
    重启试试,查杀是否生效
    重新查杀

    image


    image


    重新测试

    image


    这时不可拿shell

    腾讯电脑管家

    image


    image


    安全防护后依然可拿shell
    重新体检

    image


    image


    但是依然可拿shell

    image


    重新检测只发现了1.25G的电脑垃圾
    重新启动系统进行测试
    依然成功拿shell
    电脑管家并没有弹窗提示
    重新检测又发现了漏洞

    image


    image


    重新测试
    这时靶机蓝屏
    靶机重启后依然可拿shell
    重新扫描

    image


    重新进行测试,发现依然成功拿shell,只是会偶尔造成靶机蓝屏
    由此可见电脑管家并不能对ms17_010永恒之蓝漏洞进行防御

    360安全卫士+杀毒

    image


    image


    结果同金山毒霸,第一次执行失效,第二次成功拿shell

    image


    修复系统漏洞,测试,成功拿shell
    重启系统,查看补丁是否生效
    依然可拿shell
    偶然发现:
    在重启靶机系统后发现另外问题,网卡获取IP的速度变慢,会有一段时间的叹号出现,这与我在日常负责网络维护与管理的过程中发现的情况一致,卸载360安全卫士后,网络故障恢复,在虚拟环境上在此在此验证。
    四、总结
    根据对系统win7家庭基础班和win7企业版两个版本进行测试后发现,最有效防止黑客进行漏洞扫描及端口扫描的方式是开启windows自带的防火墙(下面的防护方法有详细操作步骤),如果没有安装漏洞补丁,强烈推荐进入微软官网进行漏洞补丁下载安装修护或者使用windows update 进行漏洞修复,不推荐第三方杀毒软件,经过三款知名度较高的中国杀毒软件厂商的漏洞测试,发现以下几个问题
    1.安装杀毒软件后无法立即生效,起到防护作用
    2.利用自带的修复功能或者扫描功能多次重复,无法扫描到漏洞本身
    3.即使声称修复了漏洞,但依然可以渗透成功,在电脑管家还出现了多次修复到相同漏洞的问题,而且修复后依然能拿shell,三款软件只有金山毒霸在扫描完成重启系统后阻止渗透进程,弹窗提示445端口,并能阻止黑客进程,即使在弹窗提示后关闭杀软,重启计算机,也可杀掉黑客进程。
    4.为用户电脑增加负担,弹广告,捆绑软件,拖累系统,甚至会引发网络故障,蓝屏等事件。
    五、防护方法
    开启windows系统自带防火墙,(系统默认开启,如开启,请忽略下面步骤)
    路径:控制面板windows防火墙打开或关闭防火墙启用windows防火墙

    image


    image


    image


    image


    安装微软官方发布的ms17-010补丁
    附上官方链接
    https://docs.microsoft.com/zh-cn/security-updates/securitybulletins/2017/ms17-010
    请选择系统对应版本进行安装

    转载请注明出处

    展开全文
  • windows系统的安全性基础 -- 访问控制

    千次阅读 2011-12-27 13:01:03
    最近看了一下msdn上关于windows的访问控制模型。访问控制就是“适当人使用适当的资源right persons use right ...第二步,操作系统要授权Authorization, 用户a要读取一个文件,操作系统检查文件的安全描述符secu

    最近看了一下msdn上关于windows的访问控制模型。访问控制就是“适当人使用适当的资源right persons use right resources.”

    所以,

    第一步,操作系统要认证Authentication, 验证是否是用户声明的用户身份。验证通过,以后,


    第二步,操作系统要授权Authorization,   用户a要读取一个文件,操作系统检查文件的安全描述符security descriptor;

                   如果“拥有读取权限的用户列表”里面存储了“用户a”,那么,操作系统继续开始文件的读取操作;

                   这个过程就是“授权” authorization;


    这个文章主要讲一下授权(Authorization),授权里面主要看看访问控制(Access Control Model);


    1) 用户token

    用户登录以后,操作系统给用户一个access token,里面主要存放了用户的权限privileges, 比如关机,调试,备份系统等等。

    用户创建进程,这个进程就复制这个用户的token到进程信息中,进程创建线程(包括主线程),线程自动得到这个token,另外,线程可以“假冒”某个客户身份,impersonate,线程得到其他用户的token‘(登录,或者参数传递进来),就可以代表这个用户去访问只有这个用户可以访问的资源。

    token里面还存储了用户的安全标识符security identifier.

    =======================

    用户token信息的打印

    =======================

    void DumpTokenInfo(void)
    {
        HANDLE hToken = NULL;
        if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
            return ;
        DWORD retLen = 0;
        GetTokenInformation(hToken, TokenGroupsAndPrivileges, NULL, 0, &retLen);
    
        TOKEN_GROUPS_AND_PRIVILEGES * pTgap = (TOKEN_GROUPS_AND_PRIVILEGES * )LocalAlloc(0, retLen);
        GetTokenInformation(hToken, TokenGroupsAndPrivileges, pTgap, retLen, &retLen);
    
        // 查询sid数组信息
        printf("\n===============Sids=====================\n");
        for (DWORD i = 0; i < pTgap->SidCount; ++i)
        {
            PSID pSid = pTgap->Sids[i].Sid;
            SID_NAME_USE sidType;
            char szName [MAX_PATH] = "";
            DWORD dwNameLen = MAX_PATH;
            char szDomain [MAX_PATH] = "";
            DWORD dwDomainLen = MAX_PATH;
            LookupAccountSidA(NULL
                , pSid
                , szName, &dwNameLen
                , szDomain, &dwDomainLen
                , &sidType);
    
            printf("Sids[%d] = %s@%s\n", i, szName, szDomain);
        }
    
        // 查询权限信息
        printf("\n===============Priveleges=====================\n");
        for (DWORD i = 0; i < pTgap->PrivilegeCount; ++i)
        {
            char szName [MAX_PATH] = "";
            DWORD dwNameLen = MAX_PATH;
            LookupPrivilegeNameA(NULL, &pTgap->Privileges[i].Luid, szName, &dwNameLen);
    
            printf("Privileges[%d] = %s\n", i, szName);
        }
    }
    /************************************************************************
    0:001> !token <<<<windbg打印出来的token信息>>>>
    /
    Thread is not impersonating. Using process token...
    TS Session ID: 0
    User: S-1-5-21-2233661284-422353248-3399546490-500
    Groups: 
    00 S-1-5-21-2233661284-422353248-3399546490-513
    Attributes - Mandatory Default Enabled 
    01 S-1-1-0
    Attributes - Mandatory Default Enabled 
    02 S-1-5-32-544
    Attributes - Mandatory Default Enabled Owner 
    03 S-1-5-32-545
    Attributes - Mandatory Default Enabled 
    04 S-1-5-4
    Attributes - Mandatory Default Enabled 
    05 S-1-5-11
    Attributes - Mandatory Default Enabled 
    06 S-1-5-15
    Attributes - Mandatory Default Enabled 
    07 S-1-5-5-0-48147
    Attributes - Mandatory Default Enabled LogonId 
    08 S-1-2-0
    Attributes - Mandatory Default Enabled 
    09 S-1-5-64-10
    Attributes - Mandatory Default Enabled 
    Primary Group: S-1-5-21-2233661284-422353248-3399546490-513
    Privs: 
    00 0x000000017 SeChangeNotifyPrivilege           Attributes - Enabled Default 
    01 0x000000008 SeSecurityPrivilege               Attributes - Enabled 
    02 0x000000011 SeBackupPrivilege                 Attributes - 
    03 0x000000012 SeRestorePrivilege                Attributes - 
    04 0x00000000c SeSystemtimePrivilege             Attributes - Enabled 
    05 0x000000013 SeShutdownPrivilege               Attributes - Enabled 
    06 0x000000018 SeRemoteShutdownPrivilege         Attributes - Enabled 
    07 0x000000009 SeTakeOwnershipPrivilege          Attributes - Enabled 
    08 0x000000014 SeDebugPrivilege                  Attributes - Enabled 
    09 0x000000016 SeSystemEnvironmentPrivilege      Attributes - Enabled 
    10 0x00000000b SeSystemProfilePrivilege          Attributes - Enabled 
    11 0x00000000d SeProfileSingleProcessPrivilege   Attributes - Enabled 
    12 0x00000000e SeIncreaseBasePriorityPrivilege   Attributes - Enabled 
    13 0x00000000a SeLoadDriverPrivilege             Attributes - Enabled 
    14 0x00000000f SeCreatePagefilePrivilege         Attributes - Enabled 
    15 0x000000005 SeIncreaseQuotaPrivilege          Attributes - Enabled 
    16 0x000000019 SeUndockPrivilege                 Attributes - Enabled 
    17 0x00000001c SeManageVolumePrivilege           Attributes - Enabled 
    18 0x00000001d SeImpersonatePrivilege            Attributes - Enabled Default 
    19 0x00000001e SeCreateGlobalPrivilege           Attributes - Enabled Default 
    Auth ID: 0:c32f
    Impersonation Level: Anonymous
    TokenType: Primary
    Is restricted token: no.
    ************************************************************************/



    =======================

    模仿客户存取特殊权限文件

    =======================

    #include <sys/stat.h>
    #include <fcntl.h>
    #include <io.h>
    
    int main(int argc, char * argv[])
    {
        char szCmd [0x20];
        printf("ImpersonateLoggedOnUser? [Y/N]>");
        gets(szCmd);
    
        // 模仿用户
        if (!_strnicmp(szCmd, "Y", 1))
        {
            HANDLE hToken = INVALID_HANDLE_VALUE;
            if (!LogonUserA("test2"
                            , "."
                            , "test2"
                            , LOGON32_LOGON_INTERACTIVE
                            , LOGON32_PROVIDER_DEFAULT
                            , &hToken))
            {
                printf("fail to LogonUserA, error %d\n", GetLastError());
                return -1;
            }
    
            if (!ImpersonateLoggedOnUser(hToken))
            {
                printf("fail to ImpersonateLoggedOnUser, error %d\n", GetLastError());
                return -1;
            }
        }
        
        // 实际上是访问文件所在的文件夹信息
        struct _stat _st;
        if (_stat("f:\\test.txt", &_st))
            return -1;
    
        printf("fsize=%d\n", _st.st_size);
    
        // 真正访问文件
        int fd = open("f:\\test.txt", O_RDONLY);
        if (fd > 0)
        {
            printf("open file ok.\n");
            close(fd);
        }
        else
        {
            printf("open failed %d.\n", GetLastError());
            return -1;
        }
    
        getchar();
        return 0;
    }


    2) 安全描述符

    操作系统中的所有资源对象(进程,线程,文件,信号量。。。)都有一个安全描述符,来描述这个对象可以被哪些用户访问,安全描述符存放2个列表,discretionary access control list (DACL),sacl。

    dacl中存放这ace(access control entries),一个ace包含一个sid和这个sid相关的的访问权(拒绝,允许,审计)。

    ========================

    安全描述符信息的打印

    ========================

    #include "accctrl.h"
    #include "aclapi.h"
    #pragma comment(lib, "advapi32.lib")
    
    /*调整权限*/
    BOOL SetPrivilege(
                      HANDLE hToken,          // access token handle
                      LPCTSTR lpszPrivilege,  // name of privilege to enable/disable
                      BOOL bEnablePrivilege   // to enable or disable privilege
                      ) 
    {
        TOKEN_PRIVILEGES tp;
        LUID luid;
    
        if ( !LookupPrivilegeValue( 
            NULL,            // lookup privilege on local system
            lpszPrivilege,   // privilege to lookup 
            &luid ) )        // receives LUID of privilege
        {
            printf("LookupPrivilegeValue error: %u\n", GetLastError() ); 
            return FALSE; 
        }
    
        tp.PrivilegeCount = 1;
        tp.Privileges[0].Luid = luid;
        if (bEnablePrivilege)
            tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        else
            tp.Privileges[0].Attributes = 0;
    
        // Enable the privilege or disable all privileges.
        if ( !AdjustTokenPrivileges(
            hToken, 
            FALSE, 
            &tp, 
            sizeof(TOKEN_PRIVILEGES), 
            (PTOKEN_PRIVILEGES) NULL, 
            (PDWORD) NULL) )
        { 
            printf("AdjustTokenPrivileges error: %u\n", GetLastError() ); 
            return FALSE; 
        } 
        if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
        {
            printf("The token does not have the specified privilege. \n");
            return FALSE;
        } 
        return TRUE;
    }
    
    int main(void)
    {
        DWORD dwRtnCode = 0;
        PSID pSidOwner = NULL, pSidGroup=NULL;
        PACL pDacl = NULL, pSacl = NULL;
        BOOL bRtnBool = TRUE;
        LPTSTR AcctName = NULL;
        LPTSTR DomainName = NULL;
        DWORD dwAcctName = 1, dwDomainName = 1;
        SID_NAME_USE eUse = SidTypeUnknown;
        HANDLE hFile;
        PSECURITY_DESCRIPTOR pSD = NULL;
        HANDLE hToken = NULL;
    
        if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken))
            return -1;
        
        SetPrivilege(hToken, SE_SECURITY_NAME, TRUE);
    
    
        // Get the handle of the file object.
        hFile = CreateFile(
            TEXT("h:\\workspace\\Test\\test2\\test2\\test2.cpp"),
            GENERIC_READ | READ_CONTROL | ACCESS_SYSTEM_SECURITY,
            FILE_SHARE_READ,
            NULL,
            OPEN_EXISTING,
            FILE_ATTRIBUTE_NORMAL,
            NULL);
    
        // Check GetLastError for CreateFile error code.
        if (hFile == INVALID_HANDLE_VALUE) {
            DWORD dwErrorCode = 0;
    
            dwErrorCode = GetLastError();
            _tprintf(TEXT("CreateFile error = %d\n"), dwErrorCode);
            return -1;
        }
    
        // Get the owner SID of the file.
        dwRtnCode = GetSecurityInfo(
            hFile,
            SE_FILE_OBJECT,
            DACL_SECURITY_INFORMATION
            | SACL_SECURITY_INFORMATION
            | OWNER_SECURITY_INFORMATION
            | GROUP_SECURITY_INFORMATION
            , 
            &pSidOwner,
            &pSidGroup,
            &pDacl,
            &pSacl,
            &pSD);
    
        // Check GetLastError for GetSecurityInfo error condition.
        if (dwRtnCode != ERROR_SUCCESS) {
            DWORD dwErrorCode = 0;
    
            dwErrorCode = GetLastError();
            _tprintf(TEXT("GetSecurityInfo error = %d\n"), dwErrorCode);
            return -1;
        }
    
        // First call to LookupAccountSid to get the buffer sizes.
        bRtnBool = LookupAccountSid(
            NULL,           // local computer
            pSidOwner,
            AcctName,
            (LPDWORD)&dwAcctName,
            DomainName,
            (LPDWORD)&dwDomainName,
            &eUse);
    
        // Reallocate memory for the buffers.
        AcctName = (LPTSTR)GlobalAlloc(
            GMEM_FIXED,
            dwAcctName);
    
        // Check GetLastError for GlobalAlloc error condition.
        if (AcctName == NULL) {
            DWORD dwErrorCode = 0;
    
            dwErrorCode = GetLastError();
            _tprintf(TEXT("GlobalAlloc error = %d\n"), dwErrorCode);
            return -1;
        }
    
        DomainName = (LPTSTR)GlobalAlloc(
            GMEM_FIXED,
            dwDomainName);
    
        // Check GetLastError for GlobalAlloc error condition.
        if (DomainName == NULL) {
            DWORD dwErrorCode = 0;
            dwErrorCode = GetLastError();
            _tprintf(TEXT("GlobalAlloc error = %d\n"), dwErrorCode);
            return -1;
        }
        // Second call to LookupAccountSid to get the account name.
        bRtnBool = LookupAccountSid(
            NULL,                   // name of local or remote computer
            pSidOwner,              // security identifier
            AcctName,               // account name buffer
            (LPDWORD)&dwAcctName,   // size of account name buffer 
            DomainName,             // domain name
            (LPDWORD)&dwDomainName, // size of domain name buffer
            &eUse);                 // SID type
    
        // Check GetLastError for LookupAccountSid error condition.
        if (bRtnBool == FALSE) {
            DWORD dwErrorCode = 0;
            dwErrorCode = GetLastError();
            if (dwErrorCode == ERROR_NONE_MAPPED)
                _tprintf(TEXT("Account owner not found for specified SID.\n"));
            else 
                _tprintf(TEXT("Error in LookupAccountSid.\n"));
            return -1;
        } else if (bRtnBool == TRUE) 
    
        // Print the account name.
        _tprintf(TEXT("Account owner = %s\n"), AcctName);
    
        // 打印dacl的信息
        if (NULL == pDacl || !IsValidAcl(pDacl)) return -1;
        ACL_SIZE_INFORMATION asi;
        if (!GetAclInformation(pDacl, &asi, sizeof(asi), AclSizeInformation))
            return -1;
    
        for (int i = 0; i < asi.AceCount; ++i)
        {
            void * pAce = NULL;
            GetAce(pDacl, i, &pAce);
            printf("Access Credential Entries[%d] is at %p\n", i, pAce);
        }
        return 0;
    }

    =======================

    创建带安全属性的对象-文件

    =======================

    void CreateKeyWithSecDesc(char * filePath)
    {
        DWORD dwRes, dwDisposition;
    
        LONG lRes;
    
        // 为EveryOne组创建一个知名sid
        SID_IDENTIFIER_AUTHORITY SIDAuthWorld 
            = SECURITY_WORLD_SID_AUTHORITY;
        PSID pEveryoneSID = NULL;
        if(!AllocateAndInitializeSid(&SIDAuthWorld, 1,
                                    SECURITY_WORLD_RID,
                                    0, 0, 0, 0, 0, 0, 0,
                                    &pEveryoneSID))
        {
            _tprintf(_T("AllocateAndInitializeSid Error %u\n"), GetLastError());
            goto Cleanup;
        }
    
        // 为ACE初始化一个"显示访问"结构
        // 这个ACE允许EveryOne读取这个对象
        EXPLICIT_ACCESS ea[2];
        ZeroMemory(&ea, 2 * sizeof(EXPLICIT_ACCESS));
        ea[0].grfAccessPermissions = FILE_GENERIC_READ | FILE_GENERIC_EXECUTE;
        ea[0].grfAccessMode = SET_ACCESS;
        ea[0].grfInheritance= NO_INHERITANCE;
        ea[0].Trustee.TrusteeForm = TRUSTEE_IS_SID;
        ea[0].Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
        ea[0].Trustee.ptstrName  = (LPTSTR) pEveryoneSID;
    
        // 为管理员组创建一个sid
        SID_IDENTIFIER_AUTHORITY SIDAuthNT 
            = SECURITY_NT_AUTHORITY;
        PSID pAdminSID = NULL;
        if(! AllocateAndInitializeSid(&SIDAuthNT, 2,
                                    SECURITY_BUILTIN_DOMAIN_RID,
                                    DOMAIN_ALIAS_RID_ADMINS,
                                    0, 0, 0, 0, 0, 0,
                                    &pAdminSID)) 
        {
            _tprintf(_T("AllocateAndInitializeSid Error %u\n"), GetLastError());
            goto Cleanup; 
        }
    
        // 为ACE初始化一个"显示访问"结构
        // 这个ACE允许管理员组完全控制这个对象的权力
        ea[1].grfAccessPermissions = FILE_ALL_ACCESS;
        ea[1].grfAccessMode = SET_ACCESS;
        ea[1].grfInheritance= NO_INHERITANCE;
        ea[1].Trustee.TrusteeForm = TRUSTEE_IS_SID;
        ea[1].Trustee.TrusteeType = TRUSTEE_IS_GROUP;
        ea[1].Trustee.ptstrName  = (LPTSTR) pAdminSID;
    
        // 创建一个新的acl,包含以上设置的2个ACE
        // ACE机器可读的,所以用“显示访问”结构
        // 去创建ACL
        PACL pACL = NULL;
        dwRes = SetEntriesInAcl(2, ea, NULL, &pACL);
        if (ERROR_SUCCESS != dwRes) 
        {
            _tprintf(_T("SetEntriesInAcl Error %u\n"), GetLastError());
            goto Cleanup;
        }
    
        // 分配一个最小"安全描述符".  
        PSECURITY_DESCRIPTOR pSD = NULL;
        pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR, 
            SECURITY_DESCRIPTOR_MIN_LENGTH); 
        if (NULL == pSD) 
        { 
            _tprintf(_T("LocalAlloc Error %u\n"), GetLastError());
            goto Cleanup; 
        } 
    
        // 初始化"安全描述符"
        if (!InitializeSecurityDescriptor(pSD,
            SECURITY_DESCRIPTOR_REVISION)) 
        {  
            _tprintf(_T("InitializeSecurityDescriptor Error %u\n"),
                GetLastError());
            goto Cleanup; 
        } 
    
        // 把ACL添加到“安全描述符 ”
        if (!SetSecurityDescriptorDacl(pSD, 
            TRUE,     // bDaclPresent flag   
            pACL, 
            FALSE))   // not a default DACL 
        {  
            _tprintf(_T("SetSecurityDescriptorDacl Error %u\n"),
                GetLastError());
            goto Cleanup; 
        } 
    
        // 把安全描述符设置到安全属性结构中
        SECURITY_ATTRIBUTES sa;
        sa.nLength = sizeof (SECURITY_ATTRIBUTES);
        sa.lpSecurityDescriptor = pSD;
        sa.bInheritHandle = FALSE;
    
        // 使用安全属性结构作为参数,
        // 把安全描述符信息设置到新创建对象中
        HANDLE hFile = CreateFileA(filePath
            , FILE_GENERIC_READ | FILE_GENERIC_WRITE | FILE_GENERIC_EXECUTE
            , FILE_SHARE_READ | FILE_SHARE_WRITE
            , &sa
            , CREATE_ALWAYS
            , FILE_ATTRIBUTE_NORMAL
            , NULL);
    
        if (hFile != INVALID_HANDLE_VALUE)
        {
            CloseHandle(hFile);
        }
        else
            _tprintf(_T("CreateFile result %u\n"), lRes );
    
    Cleanup:
    
        if (pEveryoneSID) 
            FreeSid(pEveryoneSID);
        if (pAdminSID) 
            FreeSid(pAdminSID);
        if (pACL) 
            LocalFree(pACL);
        if (pSD) 
            LocalFree(pSD);
        return;
    
    }
    


    3) 授权的过程

    一个线程访问一个资源,系统首先检查这个线程的impersionate token,如果没有就是用进程的access token,从里面获取到sid,然后遍历dacl的ace,查看和这个sid相关的每一个ace,知道找的一个拒绝或者允许的ace,就返回。


    http://msdn.microsoft.com/en-us/library/windows/desktop/aa374860(v=VS.85).aspx
    展开全文
  • 目前众多的计算机用户使用的操作系统仍是Windows 98它的安全性是大家非常关注的鉴于此写下此文希望有助于维护您的系统安全 ?设置用户权限 ?对不同的用户设置不同的使用权限限制一些用户对系统文件
  • 提升Windows 系统安全性的组策略设置 提升Windows 系统安全性的组策略设置 提升Windows 系统安全性的组策略设置 升Wows 系统安全性的组策略设置 有人将组策略比作深藏在系统大内高手,笔者觉得这个比喻非常恰当...
  • 随着互联网的普及与快速发展,信息系统的安全问题日益突出,导致安全风险明显增加。...文章分析和讨论了Windows 8引入了哪些新的安全机制,改进了哪些已有的安全措施,对提高系统的安全风险可控有哪些影响和作用。
  • 摘 要 随着个人计算机使用普及,计算机安全日益成为一个网络应用乃至全社会关注一大问题。原因在于:许多重要信息存储在计算机上,一旦...针对这些问题,该文归纳并提出了一些计算机系统安全防护方法和策略。
  • Windows XP操作系统安全防护强制要求 PAGE 35 Windows 操作系统安全防护 强制要求 二一四年五月 PAGE I 目录 TOC \o "1-3" \h \z \u 1. 系统用户口令及策略加固 1 1.1. 系统用户口令策略加固 1 1.2. 用户权限...
  • 第2章 操作系统安全 实训2-1Windows的账号安全性学时 本次课要点 学习目标 重点 难点 实训目的 掌握Windows账号与密码数据库的特点 理解Windows系统的特性 掌握强化Windows 2003密码安全性的方法 通过模拟攻击实训...
  • 针对Windows 7(以下简称Win7)优化设置方法也层出不穷用户往往是东拼西凑没个头绪而且这些方法更是真伪难辨效果到底如何也无从知晓其实利用Win7的系统组策略功能就可以实现Win7的系统优化本文为大家讲解如何利用组...
  • 组策略之软件限制策略(在域控制器中设置软件限制策略)
  • 信息安全对今天的网络系统来说是一个非常重要又非常严重的问题它涉及到从硬件到软件从单机到网络的各个方面的安全性机制而网络操作系统的安全性是整个网络系统安全体系中的基础环节Windows 2000的分布式安全机制实现...
  • 增强Windows 98的系统安全性实战 关键字:Windows 98目前,... 设置用户权限 对不同的用户设置不同的使用权限,限制一些用户对系统文件的修改权,将大大提高系统的安全性。其具体步骤如下(这里以设置“管理员
  • windows server的安全性

    2010-03-24 20:40:48
    具有创新性windows server 2008是至今为止最安全的WINDOWS系统。微软借助于可信任计算行动来加强安全性。 通过默认禁用不必要服务和锁定文件级权限来增强服务器整体安全性。除了标准...
  • Windows系统安全配置

    2021-02-28 14:03:10
    1.Windows安全设置-前置工作 安全的安装 分区设置:不要只使用一个分区 系统补丁:SP+Hotfix 补丁更新设置: 检查更新 自动下载安装或手动 2.Windows安全配置-账号安全设置 默认管理账户administrator更名 设置...
  • Windows 10是开箱即用安全操作系统,需要进行许多更改以确保符合 。 像 , ,和这样已经建议并要求进行配置更改,以锁定,强化和保护操作系统并确保政府合规。 这些更改涵盖了广泛缓解措施,包括阻止遥测...
  • 目录本地安全策略密码策略账户策略审核策略用户权限分配安全选项本地安全策略安全策略是影响计算机安全性的安全设置的组合。可以利用本地安全策略来编辑本地计算机上的帐户系统安全策略包括下面的设置:配置帐户策略...
  • Windows操作系统安全加固

    千次阅读 2019-03-28 11:55:06
    Windows操作系统安全加固 ...本文档旨在指导系统管理人员或安全检查人员进行Windows操作系统的安全合规检查和配置。 1. 账户管理和认证授权 1.1 账户 默认账户安全 禁用Guest账户。 禁用或删除其他无用...
  • ;系统安全: 安全度量;安全威胁: 系统为什么不安全;直接经济损失 名誉信誉受损 正常工作中断或受到干扰 效率下降 可靠降低 其他严重的后果 ;...Windows系统的安全架构;Windows系统的安全组件;Windows系统的对象
  • Windows安全性编程

    2019-02-14 12:28:25
    书中讨论的内容都是现今开发人员最关心的问题:设计和实现使用网络基本设施[由Windows、文件服务器、网络服务器、RPC服务器以及COM(+)服务器提供]的安全分布式系统。 本书是介绍COM(+)安全机制最全面的书籍...
  • UNIX系统安全2Windows系统 电脑资料 当你为用户精心设计了一系列安全措施后用户总会觉着有点玄 当你为用户精心设计了一系列安全措施后用户总会觉着有点玄他凭什么为这样网络就是安全的呢是根据设计方案厚度还是...
  • 信息安全工程实验二——...(四)通过Windows账户与密码的安全设置、文件系统的保护和加密、安全策略与安全模板的使用、审核和日志的启用、本机漏洞检测软件MBSA的使用,建立一个Windows操作系统的基本安全框架。
  • 指导系统管理人员或安全检查人员进行Windows操作系统的安全合规检查和配置。 指导系统管理人员或安全检查人员进行Linux操作系统的安全合规检查和配置。
  • 分析了操作系统在安装和运行过程中存在的安全隐患,系统的一些默认配置如果不经用户的自行修改往往会产生很多不安全因素的现状,比如更容易崩溃、中病毒或木马及被不法分子窥取您的资料等,提出了相应的防范措施以...
  • Windows XP 操作系统安全性(转)[@more@]  微软曾经夸耀说:“用Windows XP用户将不再需要为网络访问安全担心”, 可见Windows XP为NT内核型操作系统,其功能比任何一个Windows 系...
  • WindowsServer系统安全配置 身份标识和鉴别 检查项名称: Windows操作系统身份鉴别 检查要求: 应对登陆用户进行身份标识和鉴别,身份标识具有唯一,身份鉴别信息具有复杂度要求并定期更换。 符合判断...
  • 1、Windows操作系统的安全配置,通过设置这些配置项可以在一定程度上保证系统的安全性,有效降低被攻击的风险,为业务稳定运行提供一定的保障。安全配置加固涉及的方面包括:补丁管理、账号口令、授权管理、服务管理...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,639
精华内容 3,455
关键字:

windows系统的安全性