2018年5月18日 星期五
2018年1月4日 星期四
rails csrf token
關於什麼是 CSRF: https://everyday1percent.blogspot.com/2017/12/csrf.html
rails 主要就是這裡
```
def csrf_meta_tags
if protect_against_forgery?
[
tag("meta", name: "csrf-param", content: request_forgery_protection_token),
tag("meta", name: "csrf-token", content: form_authenticity_token)
].join("\n").html_safe
end
end
```
所以前端要用的話就要在 Header 送 X-CSRF-Token 這個參數
https://stephenhowells.net/rails-5-user-registration-with-devise-vue-js-and-axios/
這裡有簡單的用法(前端使用 Axois)
後來搭配 gon 實作成:
```js
import axios from 'axios'
const create = (baseURL = 'http://localhost:3000/') => {
const api = axios.create({
// baseURL,
headers: {
'Cache-Control': 'no-cache',
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-Token': gon.general.rails.csrf.token
},
timeout: 10000
})
const cancel = ({ market, id }) => api.delete(`/exchange/markets/${market}/orders/${id}`)
return {
cancel
}
}
export default {
create
}
```
https://medium.com/rubyinside/a-deep-dive-into-csrf-protection-in-rails-19fa0a42c0ef
rails 主要就是這裡
```
def csrf_meta_tags
if protect_against_forgery?
[
tag("meta", name: "csrf-param", content: request_forgery_protection_token),
tag("meta", name: "csrf-token", content: form_authenticity_token)
].join("\n").html_safe
end
end
```
所以前端要用的話就要在 Header 送 X-CSRF-Token 這個參數
https://stephenhowells.net/rails-5-user-registration-with-devise-vue-js-and-axios/
這裡有簡單的用法(前端使用 Axois)
後來搭配 gon 實作成:
```js
import axios from 'axios'
const create = (baseURL = 'http://localhost:3000/') => {
const api = axios.create({
// baseURL,
headers: {
'Cache-Control': 'no-cache',
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-Token': gon.general.rails.csrf.token
},
timeout: 10000
})
const cancel = ({ market, id }) => api.delete(`/exchange/markets/${market}/orders/${id}`)
return {
cancel
}
}
export default {
create
}
https://medium.com/rubyinside/a-deep-dive-into-csrf-protection-in-rails-19fa0a42c0ef
2017年12月7日 星期四
安全性相關 - CSRF
CSRF
跨站請求偽造,也被稱為 one-click attack 或者 session riding,通常縮寫為 CSRF 或者 XSRF
假設 User A 已經登入了 X 站,因為 A 的瀏覽器有存了 X 站相關的登入紀錄,當 A 進入 Y 站時,Y 站可以偷拿 A 的登入紀錄來訪問 X 站,這就是跨站請求偽造
rails 對這個的解法是加上 authenticate token,就是添加校驗 token,加 token 的方式是把 token 存在 session 裡,default 就是瀏覽器的 cookie (加密過的),然後在 form 裡面靠 `csrf_meta_tags` 這個 view helper 解密塞到 form 裡面,那麼後端就可以藉由比對:「塞在 form 裡面的 token 是不是跟 session 裡面解密後的 token 一樣」來驗證
所以說 CSRF:
1. 在同一個 session 內, token 都是一樣的,所以如果被知道了還是可以通過驗證
2. 但其他站很難知道,因為 cookie 是加密的,其他站不知道怎麼解出 cookie 找到 token
這篇文章解釋得滿清楚的:
https://medium.com/rubyinside/a-deep-dive-into-csrf-protection-in-rails-19fa0a42c0ef
那怎麼破解呢?
最先想到的方法是(未證實)
1. 使用者進來我的 Y 站的時候,我拿使用者的資訊送 GET request 訪問有包含 CSRF token 的 form 頁面
2. 想辦法把這個頁面截下來(html dom 之類的)
3. 解析這個頁面的 dom 找到 csrf token
4. 在使用者在 Y 站做其他操作時把剛剛解析到的 csrf token 加上並做跨站請求偽造
補上 wiki 對 CSRF 的解釋:
https://zh.wikipedia.org/wiki/%E8%B7%A8%E7%AB%99%E8%AF%B7%E6%B1%82%E4%BC%AA%E9%80%A0
跨站請求偽造,也被稱為 one-click attack 或者 session riding,通常縮寫為 CSRF 或者 XSRF
假設 User A 已經登入了 X 站,因為 A 的瀏覽器有存了 X 站相關的登入紀錄,當 A 進入 Y 站時,Y 站可以偷拿 A 的登入紀錄來訪問 X 站,這就是跨站請求偽造
rails 對這個的解法是加上 authenticate token,就是添加校驗 token,加 token 的方式是把 token 存在 session 裡,default 就是瀏覽器的 cookie (加密過的),然後在 form 裡面靠 `csrf_meta_tags` 這個 view helper 解密塞到 form 裡面,那麼後端就可以藉由比對:「塞在 form 裡面的 token 是不是跟 session 裡面解密後的 token 一樣」來驗證
所以說 CSRF:
1. 在同一個 session 內, token 都是一樣的,所以如果被知道了還是可以通過驗證
2. 但其他站很難知道,因為 cookie 是加密的,其他站不知道怎麼解出 cookie 找到 token
這篇文章解釋得滿清楚的:
https://medium.com/rubyinside/a-deep-dive-into-csrf-protection-in-rails-19fa0a42c0ef
那怎麼破解呢?
最先想到的方法是(未證實)
1. 使用者進來我的 Y 站的時候,我拿使用者的資訊送 GET request 訪問有包含 CSRF token 的 form 頁面
2. 想辦法把這個頁面截下來(html dom 之類的)
3. 解析這個頁面的 dom 找到 csrf token
4. 在使用者在 Y 站做其他操作時把剛剛解析到的 csrf token 加上並做跨站請求偽造
補上 wiki 對 CSRF 的解釋:
https://zh.wikipedia.org/wiki/%E8%B7%A8%E7%AB%99%E8%AF%B7%E6%B1%82%E4%BC%AA%E9%80%A0
標籤:
網路原理,
Growth Hacking,
Hack,
ROR
2017年4月13日 星期四
DNS-cache-poisoning or DNS Spoofing, Pharming Attack
很清楚的影片:
https://www.checkpoint.com/defense/advisories/public/dnsvideo/
簡單解釋:
Local 的 DNS Server 通常會有 Cache,如果能夠找到對應的網址就不會問網路上的 DNS Server,攻擊原理就是趁 Local DNS Server 問網路上的 Master DNS Server 而 response 還沒回來時假造 Master DNS Server 的 Response 讓 Local DNS Server cache 起來,這樣就可以把 User 導到自己假造的位置去,進而實行網址轉嫁攻擊(Pharming Attack)
Pharming Attack 跟 網路釣魚(Phishing)的不同在於後者是利用 email 騙受害者,而 Pharming Attack 是專指將使用者導向錯誤網站釣魚方式
http://searchsecurity.techtarget.com/answer/Phishing-vs-Pharming-attacks
Pharming Attack 還有另外一種常見的攻擊方式是修改 hosts 檔,因為電腦會先找 /etc/hosts 的設定,如果找到就不會去問 DNS,所以只要攻擊者藉由木馬或是任何方式改了 hosts 的設定,就一樣可以把使用者轉嫁到惡意網站去。
http://www.informationsecurity.com.tw/article/article_detail.aspx?tv=&aid=6813&pages=2
http://blog.miniasp.com/post/2008/10/22/Be-careful-DNS-cache-poisoning-attack.aspx
https://www.checkpoint.com/defense/advisories/public/dnsvideo/
簡單解釋:
Local 的 DNS Server 通常會有 Cache,如果能夠找到對應的網址就不會問網路上的 DNS Server,攻擊原理就是趁 Local DNS Server 問網路上的 Master DNS Server 而 response 還沒回來時假造 Master DNS Server 的 Response 讓 Local DNS Server cache 起來,這樣就可以把 User 導到自己假造的位置去,進而實行網址轉嫁攻擊(Pharming Attack)
Pharming Attack 跟 網路釣魚(Phishing)的不同在於後者是利用 email 騙受害者,而 Pharming Attack 是專指將使用者導向錯誤網站釣魚方式
http://searchsecurity.techtarget.com/answer/Phishing-vs-Pharming-attacks
Pharming Attack 還有另外一種常見的攻擊方式是修改 hosts 檔,因為電腦會先找 /etc/hosts 的設定,如果找到就不會去問 DNS,所以只要攻擊者藉由木馬或是任何方式改了 hosts 的設定,就一樣可以把使用者轉嫁到惡意網站去。
http://www.informationsecurity.com.tw/article/article_detail.aspx?tv=&aid=6813&pages=2
http://blog.miniasp.com/post/2008/10/22/Be-careful-DNS-cache-poisoning-attack.aspx
HTTP Slowloris Denial Of Service
從上一篇文章的 Reference 延伸閱讀學到的東西
這種攻擊主要是拿來攻擊 Server 讓 Server 連線數滿載沒辦法回應新的 Request
兩種攻擊模式, GET 和 POST
攻擊基本原理:Hold 住連結不放開,佔用 Server 連線
1. GET: 送 Request 的時候故意不送完整的 HTTP Header,慢慢送完
2. POST: 送 Request 的時候送很大的 content-length,然後很慢的速度送,例如每十秒送一個字
P.S./ Denial Of Service 就是阻斷式服務攻擊的意思,常見寫法為 DoS
http://www.piao2010.com/%E4%B8%80%E6%AC%A1%E5%88%86%E4%BA%AB%E5%BC%95%E5%8F%91%E7%9A%84%E8%A1%80%E6%A1%88-http-slowloris-denial-of-service
這種攻擊主要是拿來攻擊 Server 讓 Server 連線數滿載沒辦法回應新的 Request
兩種攻擊模式, GET 和 POST
攻擊基本原理:Hold 住連結不放開,佔用 Server 連線
1. GET: 送 Request 的時候故意不送完整的 HTTP Header,慢慢送完
2. POST: 送 Request 的時候送很大的 content-length,然後很慢的速度送,例如每十秒送一個字
P.S./ Denial Of Service 就是阻斷式服務攻擊的意思,常見寫法為 DoS
http://www.piao2010.com/%E4%B8%80%E6%AC%A1%E5%88%86%E4%BA%AB%E5%BC%95%E5%8F%91%E7%9A%84%E8%A1%80%E6%A1%88-http-slowloris-denial-of-service
2017年4月12日 星期三
Mac Spoofing - 竄改 MAC Address 使用付費 Wifi
原理很簡單,先查查看有哪些人在使用付費 Wifi,把自己的 MAC Address 改成他們的,Boom! 開始上網。
查自己 MAC (之後改回來):ifconfig en1 | grep ether
查哪些人在使用付費 Wifi:arp -a
改 MAC Address:sudo ifconfig en1 ether [mac address to spoof]
Bonus:
用 https://www.torproject.org/ 瀏覽
這做法可能會造成 MAC Conflit,這就要看Switch 的硬體怎麼實作的了,也許會把封包同時送給兩個位置或是只送一個或是都不送...
P.S./ 這裡指的付費 Wifi 是指沒有設密碼的 Public WIFI,連進去後要求提供信用卡資訊或是帳密登入才可以使用的 WIFI Hotpot。
https://www.youtube.com/watch?v=Agodg3dmwaQ
https://www.quora.com/Is-a-MAC-address-conflict-possible
dsniff and arpspoof
俗稱網路剪刀手
原理是讓其他電腦把封包發到自己的電腦藉此做進一步的行為
假設我把他的封包全部丟掉那他就會斷網
或是我也可以檢查他的所有封包,也許有機會拿到重要資料例如密碼和網站 cookie, token 等,又稱做 Man-in-the-middle attack
但是要怎麼讓對方電腦把封包發到自己的電腦呢?
痾,有點雃回答,還是先回答什麼叫做 ARP 好了
ARP(Address Resolution Protocol)位址解析協定
https://zh.wikipedia.org/wiki/%E5%9C%B0%E5%9D%80%E8%A7%A3%E6%9E%90%E5%8D%8F%E8%AE%AE
原則上 ARP 其實就是一個 mapping 的機制,把 IP 跟 MAC address 綁在一起,這樣就可以從 IP 知道要把封包傳送給哪個 MAC
所以,要怎麼讓對方電腦把封包發到自己的電腦呢?
就是讓受攻擊者電腦的 ARP 誤以為其他 IP 是綁在自己的 MAC Address,要做到很簡單,就送 ARP Reply 給被攻擊者,然後把 sender IP 跟 MAC 位置亂搞一通就好
以此邏輯來看,如果是要剪網,就是把被攻擊者的 IP 送給 router 綁定一個假的 MAC address,這樣 router 就會把資料都送到假的位置上,被攻擊者就不會有網路可以用了
也可以把 router 的 IP 綁一個假的 MAC 送給被攻擊者,一樣的效果
而 Man-in-the-middle attack 也是差不多,假設我要偷對方 FB 資訊,那我就把 FB IP address + 我的 MAC address 送 ARP Reply 給被攻擊者就好了,這樣他所有要送給 FB 的資訊就會先經過我,我檢查過後再幫他送出就有機會可以查看到機密資料。
http://www.itwendao.com/article/detail/142631.html
https://hackvault.blogspot.com.au/2014/08/dsniff-and-arpspoof-on-mac.html
https://zh.wikipedia.org/zh-hant/ARP%E6%AC%BA%E9%A8%99
訂閱:
文章 (Atom)