OpenSSL心血漏洞的检测和修复方法

近日,Linux社区爆出了关于Linux上Bash的安全漏洞,该漏洞源于你调用的bash shell之前创建的特殊的环境变量,这些变量可以包含代码,同时会被bash执行。 不同于之前的SSL的HeartBlood漏洞,这个Bash漏洞能让黑客通过嵌入恶意命令完全控制目标机器,而不像HeartBlood只是可以嗅探敏感信息。
对于所有安装GNU bash 版本小于或者等于4.3的Linux操作系统都应该检测并修复该漏洞,以免造成不必要的损失。

检测方法

命令行中输入:

env x='() { :;}; echo vulnerable’ bash -c “echo this is a test”  

如果显示了如下红色加粗内容,说明你的linux系统存在该漏洞,请立即修复。

vulnerable
this is a test

修复方法

RedHat系操作系统(RedHat,CentOS),安装完成需要重启

yum update bash 

Ubuntu系列(无需重启):

apt-get update   
apt-get install bash

验证是否修复成功

命令行输入 :

env x='() { :;}; echo vulnerable’ bash -c “echo this is a test” 

显示如下信息表示修复成功:

bash: warning: x: ignoring function definition attempt 
bash: error importing function definition for `x’ 
this is a test
2015/04/21 posted in  远古知识

数据路由过程

  1. 如果一个mac上对应有多个ip地址,那么数据按照协议栈向下封装时,怎么确定封装ip头的时候使用哪个ip地址呢?
    这个是靠数据目的ip决定的,首先系统会根据设备的其他网段的ip和掩码确定目的ip是否是内网的,如果是则用相应的内网ip封装ip头,如果不是,就说明这个数据包时发送到外网的,这个时候就封装外网ip。并将该数据包发送给网关进行转发。
    如果把一个网段掩码改了,让这个内网变小,那么本来是用内网ip封的数据包,就会改用外网ip封装。

  2. 路由器怎么区分外网传进来的数据是给内网哪台设备的?

    通信过程要考虑传输层,传输层有端口号。比如用的TCP协议。外网C获得主机AB的IP地址都是路由器的地址说明做了nat的。你a和b同时访问C的时候 经过你内网路由器的时候是做了nat的,a的数据包出去的时候目标是C的ip和C的端口,c收到的数据包源ip会是路由的 但是源端口是XXXX ,b同时出去访问c的时候目标是C的ip和C的同一个端口,c收到的数据包源ip也是路由的,但是源端口不会是XXXX而是另外一个YYYY, 路由器做nat的时候端口不会出现重复的,并且会做对照记录,然后c在回复时候会分别回复给相同ip,但是端口是路由器的两个不同端口,然后路由两个收到两个端口数据后会比照刚才那个对照表 然后分别转发给A和B。

  3. 路由器怎么区分这个数据包是内网的还是外网的?

    这个是靠封装数据包中链路层的目的mac地址决定的,当封装的mac地址是内网mac时就说明这个数据包是发送给内网的某一台设备的,从而路由器或交换机会根据自己的mac端口映射表和背部总线,将数据包发送给对应端口。如果这个目的mac封装的是网关的mac就说明这个数据包是要发送到外网的,路由器将会根据自己的路由表将这个据包发送到下一跳。

  4. 路由器在公网下的转发数据时怎么完成的?

    内网的设备发送数据包的时候,首先要经过网关做NAT转换,即将内网ip替换成网关的ip。之后数据包在路由器之间交换的时候只需要替换目的mac即可,数据包回来的时候也可以看成是一次反向的发送,然后仍然是根据路由表替换目的mac即可。

2013/05/31 posted in  远古知识

Mimetic库分析3——Mime头Header

Mimetic的header和body以一个空格来区分。如下

红线以上部分就是Header了,红线以下部分就是body。
Mimetic中Header的继承关系如下

Header:public Rfc822Header:public std:deque<Field>

可以看到Header中存放的值是一个deque队列,队列里面的每一项都是一个name-value的pari对,name就是header中每一行冒号左边的字符串,而value就是冒号右边的字符串。mimetic将这两部分组成一个pair存放在deque中。然后在Header类中提供相应的接口存取这些值。

下图是Header的接口

RfcHeader的接口

2013/05/31 posted in  远古知识

Mimetic库分析2-——入口类MimeEntity

整个Mimetic的入口类就是MimeEntity类,整个MIME格式文件或者字符串都是在MimeEntity内部完成解析的。
MimeEntity类很简单,其成员如下:

MimeEntity类提供了两种常用的初始化方式

迭代器初始化:

ifstream file_in("test.eml");  //文件流
ostrstream ostr<<ifstream;  //转换成strstream
string str_eml=ostr.str();     //将ifstream转换成string字符串
MimeEntity me(str_eml.begin(),str_eml.end());  

流初始化

ifstream file_in("test.eml");         
MimeEntity me(file_in);

其中MimeEntity(Iterator beg,Iterator end,int mask = imNone)这个构造函数的第三个参数mask是解析参数,可以去下列值:

imNone   //完整解析整个MIME格式文件
imHeader  //忽略MIME头
imBody     //忽略MIME正文
imChildParts  //忽略嵌套的MIME
imPreamble   //忽略冗余头
imEpilogue    //忽略结束符

MimeEntity将整个MIME格式分成两部分,以空格(\r\n\r\n)为分割符,空格以上的为MIME头,存放在m_header中,空格以下的为MIME正文,存放在m_body中,可以分别通过调用成员函数header()和body()得到相应的类型值。

#include<iostream>
#include<mimetic/mimetic.h>
    
using namespace std;
using namespace mimetic;
    
int main()
{               
    ifstream file_in("test.eml");         
    if(!file_in)
        return -1;
    MimeEntity me(file_in);
    cout<<me<<endl;   //可以直接打印出该邮件内容
    return 0;
}
2013/05/31 posted in  远古知识

Mimetic库分析1——安装和使用mimetic

Mimetic库是开源的MIME格式解析库,利用mimetic不仅可以解析标准的邮件文件(message/rfc822),也可以用来解析某些协议中用到的MIME编码。例如webmail,其http报文中就有大量用MIME格式编码的信息。
mimetic库的项目主页是
http://www.codesink.org/mimetic_mime_library.html,可以在上面下载到最新的mimetic库。
目前最新的mimetic-0.9.7的下载地址如下:http://www.codesink.org/download/mimetic-0.9.7.tar.gz

安装

将下载好的mimetic-0.9.7.tar.gz包放到指定目录,解压:

 tar -zvxf mimetic-0.9.7.tar.gz
 cd mimetic
 ./configure
 make
 make install

初步使用

安装好mimetic后就可以在程序中使用mimetic提供的库函数了,可以用官方提供的小例子测试下是否能正常使用

#include<iostream>
#include<mimetic/mimetic.h>

using namespace mimetic;
using namespace std;
intmain()
{
    MimeEntity me;
    me.header().from("me <me@domain.com>");
    me.header().to("you <you@domain.com>");
    me.header().subject("my first mimetic msg");
    me.body().assign("hello there!");
    cout << me << endl;
    return0;
}

编译好后运行,如果可以正常输出,说明可以正确使用mimetic库了。

如果运行提示找不到libmimetic.so.o,将/usr/local/lib下的libmimetic.so.o拷贝到/usr/lib下就可以正常运行)。

mimetic帮助

mimetic的在线帮助地址如下:http://www.codesink.org/data/mimetic/docs/html/index.html
如果你想生成本地的mimetic文档,可以执行如下操作

  cd mimetic-0.9.7/doc #进入mimetic帮助目录
  make docs #生成doc文档

会生成一份html文档的本地帮助

2013/05/31 posted in  远古知识