Redis - 被挖礦病毒入侵攻擊的事件紀錄

前言 前幾天在 Linode 上開了一台 VPS 部署我的程式,裏頭用到 JWT token 與 Redis 作登入登出的機制,本來想說這個 VM 是做為測試用途,就沒有把 Redis 加密,也沒有限定 ip 連線,意外導致 redis 對外開放,受到挖礦病毒的攻擊,查了一下網路上的心得,發現蠻多人像我一樣一時疏忽而中招,因此寫了這篇文章來簡單紀錄一下過程。 事出必有因 整件事情的起頭是這樣,我在 VPS 上用 docker-compose 部署三個服務,分別是我的 api server、PostgreSQL、Redis,前端則是部署在 Netlify 上。 剛開始一切運行都很正常,但測試了一下馬上就發現有個小問題,我前端登入之後,沒多久 cookie 就失效被強制登出,由於我的 expire 設定 24 小時,沒道理這麼快就過期,所以直覺地去查了一下 Redis 內存的 session,看了一下記憶體用量也沒有發現什麼異常現象,就暫時沒有追蹤下去。 隔天我再測試,發現前端已經無法登入了,再次連到 VM 上看一下 api-server 的 log,發現源源不絕的 error 從 Redis 那邊不斷噴出來 1:S 15 May 2023 20:47:34.995 * Non blocking connect for SYNC fired the event. 1:S 15 May 2023 20:47:36.398 # Failed to read response from the server: No error information 1:S 15 May 2023 20:47:36....

<span title='2023-05-16 00:49:13 +0800 +0800'>May 16, 2023</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;303 words&nbsp;·&nbsp;Madi

密碼學中的 Encode(編碼)、Encrypt(加密) 跟 Hash(雜湊) 差異

前言 前陣子用 Node.js 開發時需要用一組加解密的 key 來將某個 url 的 query parameters 加密,就重新回頭研究一下對稱加密與非對稱加密的差異和手段,最後統一用 Node.js 的套件來簡單實作,留下此篇文章以供未來參考 密碼學在學什麼? 密碼學的目標可以簡單列出底下三個: 資訊保密: 確保只有授權者才能取得訊息 完整性驗證: 確保資訊沒有遭到算改 身分驗證: 驗證傳送方與接受方的身分 密碼學主要分為三種,先講結論: Encode(編碼) Two way 的轉換,只是編碼格式的轉換,不需要密碼,所以不算加密,沒有任何資安防護能力 Encrypt(加密) Two way 的轉換,需要密碼介入,可分成對稱加密與非對稱加密,前者是同一把金鑰,後者是有一組公私鑰,有防護資安的能力 Hash(雜湊) One way 的轉換(不可逆),應用 Hashing 的演算法將待加密的字串轉換成一個獨一無二的 hash digest Encode(編碼) 只是換個方式來呈現資料 沒有加密,所以沒有安全性 只是各種平台使用數據的載體,ex: QRCode、UTF-8 為了配合網路傳輸的標準規範(RFC,Requests For Comment),有時就必須透過編碼後才能傳送 Base64 是一種基於 64 個字符來表示的方法 Base64 中的 64 其實是有含意的,他會把資料轉成: a~z (26) A~Z (26) 0~9 (10) + (1) / (1) base64 的 64 就是上面五種字元的所有可能(26+26+10+1+1=64) 打開瀏覽器的 console 介面,用 Web API 就可以開箱及用...

<span title='2023-02-06 19:49:13 +0800 +0800'>February 6, 2023</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;521 words&nbsp;·&nbsp;Madi