ipc

進程間通信

進程間通信(IPC,Inter-Process Communication)指至少兩個進程或線程間傳送數據或信號的一些技術或方法。

進程間通信


IPC(Inter-Process Communication)進程間通信,提供了各種進程間通信的方法。在Linux C編程中有幾種方法
(1) 半雙工Unix管道
(2) FIFOs(命名管道)
(3) 消息隊列
(4) 信號量
(5) 共享內存
(6) 網路Socket
FIFOs是共享"命名管道"的資源,它是為了讓進程間通信而開放的命名管道,通過提供可信任的用戶名和口令,連接雙方可以建立安全的通道並以此通道進行加密數據的交換,從而實現對遠程計算機的訪問。IPC是NT/2000的一項新功能,它有一個特點,即在同一時間內,兩個IP之間只允許建立一個連接。NT/2000在提供了ipc功能的同時,在初次安裝系統時還打開了默認共享,即所有的邏輯共享(c,d,e……)和系統目錄winnt或windows(admin)共享。所有的這些,微軟的初衷都是為了方便管理員的管理,但在有意無意中,導致了系統安全性的降低。
平時我們總能聽到有人在說ipc漏洞,ipc漏洞,其實ipc並不是一個真正意義上的漏洞,我想之所以有人這麼說,一定是指微軟自己安置的那個‘後門’:空會話(Null session)。
網路入侵
IPC(Inter-Process Communication)網路入侵
為了幫助大家更好的學習IPC,我在這裡特定整理及完善了一下IPC的概念、一些常用命令、在IPC出現在些問題的原因等等,資料大都來自網際網路,由於不知道作者名字,故不能標記內容來處,敬請見諒。
IPC的概念
空會話的概念
空會話是在沒有信任的情況下與伺服器建立的會話,對於一個空會話,LSA提供的令牌的SID(空會話的SID)是S-1-5-7,用戶名是:ANONYMOUS LOGON(系統內置的帳號),該訪問令牌包含下面偽裝的組:Everyone和Network。
IPC建立的過程
1)會話請求者(客戶)向會話接收者(伺服器)傳送一個數據包,請求安全隧道的建立;
2)伺服器產生一個隨機的64位數(實現挑戰)傳送回客戶;
3)客戶取得這個由伺服器產生的64位數,用試圖建立會話的帳號的口令打亂它,將結果返回到伺服器(實現響應);
4)伺服器接受響應后發送給本地安全驗證(LSA),LSA通過使用該用戶正確的口令來核實響應以便確認請求者身份。如果請求者的帳號是伺服器的本地帳號,核實本地發生;如果請求的帳號是一個域的帳號,響應傳送到域控制器去核實。當對挑戰的響應核實為正確后,一個訪問令牌產生,然後傳送給客戶。客戶使用這個訪問令牌連接到伺服器上的資源直到建議的會話被終止。
IPC連接條件
★ 跟操作系統相關(NT/2000/XP可以建立ipc$連接,98/ME不能建立ipc$連接);
★ 目標主機必須要開啟ipc$共享;
★本地主機必須要啟動Lanmanworkstation服務(功能為提供網路鏈結和通訊);
★ 目標主機必須要啟動Lanmanserver服務(ipc$依賴於此服務,它提供了 RPC 支持、文件、列印以及命名管道共享);
★ 目標主機必須要啟動NetLogon,它支持網路上計算機 pass-through 帳戶登錄身份;
★ 目標主機應該啟動NBT(打開139埠);
★ 目標主機防火牆配置(如果屏蔽139和445埠也將導致連接失敗);
★ 用戶名或者密碼錯誤;
★ 命令輸入錯誤(特別要注意空格的輸入,用戶名和密碼中不包含空格時兩邊的雙引號可以省略,密碼為空,直接輸入兩個引號"");
★ 建立好連接后目標主機重啟,ipc$連接會自動斷開。
連接錯誤號分析
錯誤號5:拒絕訪問,許可權不夠;
錯誤號51:無法找到網路路徑(網路有問題);
錯誤號53:找不到網路路徑(ip地址錯誤;目標主機未開機;目標主機lanmanserver服務未啟動;目標主機防火牆設置過濾埠);
錯誤號67:找不到網路名(本地主機中lanmanworkstation服務未啟動或者目標主機刪除了ipc$);
錯誤號1219:提供的憑據與已存在的憑據集衝突(已經建立了一個ipc$,可以刪除再連);
錯誤號1326:用戶名或密碼錯誤;
錯誤號1792:試圖登錄,網路登錄服務沒有啟動(目標主機中NetLogon服務未啟動);
錯誤號2242:該用戶的密碼已經過期。
常用口令
★ 建立空連接: net use\\IP\ipc$"" /user:""
★ 建立非空連接: net use\\IP\ipc$"password" /user:"username"
★ 查看遠程主機的共享資源(但看不到默認共享) net view\\IP
★ 查看本地主機的共享資源(可以看到本地的默認共享) net share
★ 得到遠程主機的用戶名列表 nbtstat -A IP
★ 得到本地主機的用戶列表 net user
★ 查看遠程主機的當前時間 net time\\IP
★ 顯示本地主機當前服務 net start
★ 啟動/關閉本地服務 net start 服務名 /y net stop 服務名 /y
★ 映射遠程共享: net use z:\\IP\sihochina此命令將共享名為sihochina的共享資源映射到z盤
★ 刪除共享映射 net use z: /del /y 刪除映射的z盤net use * /del /y 刪除全部
★ 向遠程主機複製文件 copy \路徑\*.exe\\IP\共享目錄名,如: copy sihochina.exe\\IP\c將當前目錄下的sihochina.exe複製到對方c盤內
★ 遠程添加計劃任務 at\\ip時間 程序名,如: at\\192.168.0.111:00 sihochina.exe 11:00在主機192.168.0.1上運行sihochina.exe
本文所用的方法主要是在VISTA 旗艦版SP2以及XP SP2的環境下測試的,別的系統沒做測試,不過相信都大同小異,出現的問題也應該差不多,我將列舉我在兩個系統的實驗中所出現的所有問題供大家參考。

定義作用


進程間通信( IPC,Inter-Process Communication),指至少兩個進程或線程間傳送數據或信號的一些技術或方法。進程是計算機系統分配資源的最小單位(嚴格說來是線程)。每個進程都有自己的一部分獨立的系統資源,彼此是隔離的。為了能使不同的進程互相訪問資源並進行協調工作,才有了進程間通信。舉一個典型的例子,使用進程間通信的兩個應用可以被分類為客戶端和伺服器,客戶端進程請求數據,服務端回復客戶端的數據請求。有一些應用本身既是伺服器又是客戶端,這在分散式計算中,時常可以見到。這些進程可以運行在同一計算機上或網路連接的不同計算機上。
進程間通信技術包括消息傳遞、同步、共享內存和遠程過程調用。IPC是一種標準的Unix通信機制。
使用IPC 的理由:
• 信息共享:Web伺服器,通過網頁瀏覽器使用進程間通信來共享web文件(網頁等)和多媒體;
• 加速:維基百科使用通過進程間通信進行交流的多伺服器來滿足用戶的請求;
• 模塊化;
• 私有權分離。
與直接共享內存地址空間的多線程編程相比,IPC的缺點:
• 採用了某種形式的內核開銷,降低了性能;
• 幾乎大部分IPC都不是程序設計的自然擴展,往往會大大地增加程序的複雜度。

主要方法


方法提供方(操作系統或其他環境)
文件多數操作系統
信號多數操作系統
Berkeley套接字多數操作系統
消息隊列多數操作系統
管道所有的POSIX系統,Windows
命名管道所有的POSIX系統,Windows
信號量所有的POSIX系統,Windows
共享內存所有的POSIX系統,Windows
Message Passing用於MPI規範,Java RMI,CORBA,MSMQ,MailSlot以及其他
Memory-Mapped File所有的POSIX系統,Windows