快速修複漢澳sinox命令解釋程式bash shell

來源:互聯網
上載者:User

標籤:io   os   使用   ar   for   檔案   sp   div   2014   

bash是linux預設命令列管理程式shell,漢澳 sinox也安裝有,雖然sinox並沒有預設使用bash,但是使用者一旦使用就會可能被通過漏洞入侵,所以必須快速修複。雖然sinox使用freebsd 的ports,但是freebsd已經升級到最新的軟體管理pkg,ports正在被淘汰,要通過portsnap直接更新到最新的ports然後用pkg安裝,不過最新的ports只是在freebsd10以上使用,對於低版本pkg可能不支援。不管怎麼說,如果你要用pkg,只能用freebsd10,否則問題會很多,pkg會直接升級到軟體的最新版本。pkg產生是為了實作類別似yum直接更新二進位程式。要想編譯最新的ports,先編譯安裝最新的pkg。最新的ports在sinox運行有的程式會有問題的。

既然如此,我們只能修改 sinox目前的版本bash,把漏洞堵上去。先看bash漏洞。

運行env x=‘() { :;}; echo vulnerable’ bash -c “echo this is a test”
產生結果
vulnerable
echo this is a test
問題是,環境變數x通過() { :;}; echo vulnerable獲得,但其中echo是系統命令,會執行。
如果把 echo vulnerable改成ls,pwd會怎麼樣,如果是sudo就會獲得超級管理員的許可權。網頁使用者可以通過cgi程式等方式使用bash運行指令控制系統。

我查閱了網上資料,堵漏洞原理就是修改程式中對引入函數的處理,並參考了最新bash ports改動方式,制定了目前的版本bash堵漏洞辦法。

先用make extract,make patch把代碼解壓出來,然後備份shell.c和variables.c為後面加.orig,然後修改shell.c和variables.c,改好後進入源碼目錄產生補丁。

diff -uN shell.c.orig shell.c > shell.c.patch
diff -uN variables.c.orig variables.c >variables.c.patch

把產生的patch檔案放到ports源碼files目錄.然後在 Makefile增加這兩行

EXTRA_PATCHES+= ${PATCHDIR}/shell.c.patch
EXTRA_PATCHES+= ${PATCHDIR}/variables.c.patch

現在進入目錄,make clean;make。檢查一下代碼是否已經改正好。如果好了就make install.

為了強制安裝,我在/etc/make.conf增加

FORCE_PKG_REGISTER=yes

安裝好了以後,運行bash。輸入上面命令列,不再出現vulnerable,修複成功。

為了用gcc4.6編譯,我在make.conf設定

DISABLE_VULNERABILITIES=YES
.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc46)

CC=gcc46
CXX=g++46
CPP=cpp46
.endif

下面粘貼patch檔案
shell.c.patch

— shell.c.orig 2011-01-03 05:04:51.000000000 +0800
+++ shell.c 2014-10-11 17:37:30.000000000 +0800
@@ -225,7 +225,7 @@
#else
int posixly_correct = 0; /* Non-zero means posix.2 superset. */
#endif

+int import_functions = 0;//IMPORT_FUNCTIONS_DEF; //patch
/* Some long-winded argument names. These are obviously new. */
#define Int 1
#define Charp 2
@@ -244,6 +244,7 @@
{ “help”, Int, &want_initial_help, (char **)0x0 },
{ “init-file”, Charp, (int *)0x0, &bashrc_file },
{ “login”, Int, &make_login_shell, (char **)0x0 },
+ { “import-functions”, Int, &import_functions, (char **)0x0 }, //patch
{ “noediting”, Int, &no_line_editing, (char **)0x0 },
{ “noprofile”, Int, &no_profile, (char **)0x0 },
{ “norc”, Int, &no_rc, (char **)0x0 },

variables.c.patch

— variables.c.orig 2014-10-11 19:22:10.000000000 +0800
+++ variables.c 2014-10-11 19:21:34.000000000 +0800
@@ -100,6 +100,7 @@
extern int assigning_in_environment;
extern int executing_builtin;
extern int funcnest_max;
+extern int import_functions;//patch

#if defined (READLINE)
extern int no_line_editing;
@@ -312,7 +313,8 @@
char *name, *string, *temp_string;
int c, char_index, string_index, string_length;
SHELL_VAR *temp_var;

+ int skipped_import;//patch
+
create_variable_tables ();

for (string_index = 0; string = env[string_index++]; )
@@ -335,11 +337,18 @@
char_index == strlen (name) */

temp_var = (SHELL_VAR *)NULL;

+ skipped_import = 0;//patch
+reval: //patch
/* If exported function, define it now. Don’t import functions from
the environment in privileged mode. */
– if (privmode == 0 && read_but_dont_execute == 0 && STREQN (“() {“, string, 4))
+ if (skipped_import == 0 && privmode == 0 && read_but_dont_execute == 0 && STREQN (“() {“, string, 4)) //patch
{
+ if (!import_functions && !interactive_shell) { //patch————
+ skipped_import = 1;
+ //report_error (_(“Skipping importing function definition for `%s‘: –import-functions required.”), tname);
+ goto reval;
+ } //———–patch
+
string_length = strlen (string);
temp_string = (char *)xmalloc (3 + string_length + char_index);

我為sinox2014就是64位製作了bash修複安裝包,安裝命令如下|
pkg_add -f ftp://sinox.3322.org/bash-4.2.20.tbz

sinox2013沒有製作修複安裝包,大家可以自己按上面說明自己編譯修複。

快速修複漢澳sinox命令解釋程式bash shell

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.