kiến thức [Event tặng Title] Security khi phát triển system

  • Người tạo chủ đề Người tạo chủ đề botmingoc
  • Ngày bắt đầu Ngày bắt đầu

botmingoc

Member
Thiết kế bảo mật cho app.

Không thể nói là app tao 100% vô địch bảo mật vì vỏ quýt dày có móng tay nhọn, tuy nhiên từ những vụ lùm xùm như [thanh niên security researcher của AWS brute force key của app COVID] hay [chuyên gia thaidn hack được rất nhiều app của chú phỉnh],… Mình thấy nên có 1 vài notes trong việc thiết kế bảo mật cho system.
(Security cũng rất rộng nên mình chỉ nói theo góc nhìn từ dev/solution architect theo kinh nghiệm của mình)

Nếu size của cty vài trăm dev đổ lên, nên có 1 security board review: threat model, crypto review, data lưu ở đâu, bảo mật thế nào, có khoá mật mã nào ko,… Những người này là chuyên gia về security: thời gian bạn bỏ công ra ngồi code thì họ cũng bỏ công ra nghiên cứu, kiến thức của họ sẽ rất chuyên sâu => đúng người đúng việc là tiết kiệm thời gian.
Nếu bạn team bé, startup muốn move fast: vậy thì dựa theo những chuẩn đã có, đừng sáng tạo. Ae dev nên theo:

  • Về lý thuyết mật mã, NIST công bố rất nhiều tài liệu hữu ích về tiêu chuẩn: symmetric encryption thì khoá phải ít nhất bao nhiêu, RSA key length thế nào, ECC dùng những curve nào…. Nếu đọc sẽ tránh những lỗi ngớ ngẩn như app covid dùng khoá RSA 512 quá ngắn nó brute force 2 tiếng là xong.
  • Về protocol, RFC là nguồn tài liệu tuyệt vời. AuthN/AuthZ thế nào (Oauth2), communication between client<->server thế nào (JWS/JWE), rồi cả những tài liệu chi tiết tầng dưới như TLS1.2, 1.3… Để thiết kế tốt hơn, mình phải hiểu rõ hiện tại như thế nào đã (với app thông thường mình nghĩ cứ 99% áp dụng là ngon, app nào chuyên bảo mật thì toàn cao thủ rồi ko phải dạy :D)
  • Về cách implement: lời khuyên là đừng tự implement crypto primitive. Hãy dùng những thư viện có sẵn từ OS (Apple/Google/Microsoft cung cấp rất nhiều từ OS của họ) hoặc các 3rd uy tín (như OpenSSL hoặc tool từ OWASP). Nếu app bạn rất thông thường nhưng muốn thuật toán về crypto OpenSSL ko support, nên đặt câu hỏi ngược lại là mình có thực sự cần không?
  • Những tool scan code cũng rất tốt cho review. Nếu có redteam hay pentester thì tốt rồi, nếu không thì cài những tool scan code cho hook vào project trước khi big release cũng được.

Ví dụ evaluate process:

Bạn có 1 system đơn giản: app mobile và API.
Giờ giữa app và API, để thông tin trao đổi secure, cứ dựa trên https.
Bạn muốn thiết kế user login, protect resource: vậy thì apply Oauth2 vào.
Bạn muốn more secure, Oauth2 token có thể bị đánh cắp từ session này sang -> token binding, chuyển từ Bearer token sang Pop token.
Bạn có những thông tin quan trọng hơn nữa cần bảo mật, lúc này cần phân tích sâu về use cases. Phải thật rõ ràng bạn muốn đạt được điều gì và khả năng setup của hệ thống bạn ntn.
  • Thông tin ai cũng xem đc nhưng ko ai temper đc?
  • Thông tin ko muốn ai xem, chỉ có mình và server?
  • Key setup thế nào, pre-shared hay wrap hay key agreement? Ai tạo key, ai giữ key, ai có quyền dùng key…

Security ko chỉ làm 1 cái là xong nghỉ luôn. System của bạn phát triển thì security cũng cần được nâng cấp. Nên có lịch định kỳ threat model, protocol security review, scan code,… để đảm bảo an toàn. Mỗi lần nên rotate người, có góc nhìn mới. Nếu ko thì lại: ồ giống lần trc, ko có gì giải tán sớm.

Đấy là cách chỗ mình làm handle security. Ae chém cho vui, đời dev cứ chém là vui.
 
Nice!
Có 1 câu hỏi như này cho chủ thớt và anh em chém gió cho vui, với cũng muốn nghe xem cty các bạn handle như nào.
Db của 1 cty thì bao giờ cũng sẽ có 1 số ít nắm quyền super user, ví dụ devops/CTO chẳng hạn.
Bạn làm thế nào để có thể đảm bảo dc với khách hàng, v.v… rằng sẽ hạn chế nhất tình huống những ng nắm account super user này can thiệp ngầm vào DB nhằm mục đích cá nhân?
Đôi khi có những chỉnh sửa nho nhỏ trên 1 record cũng có thể trục lợi hàng ngàn đô rồi. Ng ảnh hưởng trực tiếp sẽ là khách hàng hoặc chính công ty.
 
Nice!
Có 1 câu hỏi như này cho chủ thớt và anh em chém gió cho vui, với cũng muốn nghe xem cty các bạn handle như nào.
Db của 1 cty thì bao giờ cũng sẽ có 1 số ít nắm quyền super user, ví dụ devops/CTO chẳng hạn.
Bạn làm thế nào để có thể đảm bảo dc với khách hàng, v.v… rằng sẽ hạn chế nhất tình huống những ng nắm account super user này can thiệp ngầm vào DB nhằm mục đích cá nhân?
Đôi khi có những chỉnh sửa nho nhỏ trên 1 record cũng có thể trục lợi hàng ngàn đô rồi. Ng ảnh hưởng trực tiếp sẽ là khách hàng hoặc chính công ty.

Bộ môn bác nói là bảo mật an toàn thông tin, nó bao gồm dự phòng rủi ro từ nhiều nguồn như từ cá nhân, hoặc từ thảm họa tự nhiên(động đất, sóng thần) Cái này nó mang tính cam kết và policy từ công ty nhiều hơn.

Còn đồng ý với bác thớt về vụ team size => sẽ có chiến thuật khác nhau. Em gặp vô số startup có CTO và SA giả cầy và đa số chết ở khoản này khi không biết liệu cơm gắp mắm. Cái giá trả ra là 1 lượng lớn tiền của bỏ ra để maintain lại hệ thống. :go:
 
Bộ môn bác nói là bảo mật an toàn thông tin, nó bao gồm dự phòng rủi ro từ nhiều nguồn như từ cá nhân, hoặc từ thảm họa tự nhiên(động đất, sóng thần) Cái này nó mang tính cam kết và policy từ công ty nhiều hơn.

Còn đồng ý với bác thớt về vụ team size => sẽ có chiến thuật khác nhau. Em gặp vô số startup có CTO và SA giả cầy và đa số chết ở khoản này khi không biết liệu cơm gắp mắm. Cái giá trả ra là 1 lượng lớn tiền của bỏ ra để maintain lại hệ thống. :go:

à yeah, cái mình nói nó ko phải là security cho API mà là cho hệ thống. Đọc bài của chủ thớt có đoạn phía dưới cũng liên quan nên tiện hỏi luôn.

Cam kết và policy là 1 chuyện thôi, mình có thể triển khai các biện pháp kỹ thuật thêm, thì khách hàng mới tin dc. Thực ra với super user thì rất khó chặn, chỉ là làm nó khó hơn, có thể ko riêng với super user mà với dev cầm account có permission insert/update chẳng hạn.
Riêng chặn dev táy máy thôi cũng nhiều cái có thể làm. T*k* cũng từng đuổi 1 ông dev trộm coupon rồi (nghe đồn) :)
 
Thiết kế bảo mật cho app.

Không thể nói là app tao 100% vô địch bảo mật vì vỏ quýt dày có móng tay nhọn, tuy nhiên từ những vụ lùm xùm như [thanh niên security researcher của AWS brute force key của app COVID] hay [chuyên gia thaidn hack được rất nhiều app của chú phỉnh],… Mình thấy nên có 1 vài notes trong việc thiết kế bảo mật cho system.
(Security cũng rất rộng nên mình chỉ nói theo góc nhìn từ dev/solution architect theo kinh nghiệm của mình)

Nếu size của cty vài trăm dev đổ lên, nên có 1 security board review: threat model, crypto review, data lưu ở đâu, bảo mật thế nào, có khoá mật mã nào ko,… Những người này là chuyên gia về security: thời gian bạn bỏ công ra ngồi code thì họ cũng bỏ công ra nghiên cứu, kiến thức của họ sẽ rất chuyên sâu => đúng người đúng việc là tiết kiệm thời gian.
Nếu bạn team bé, startup muốn move fast: vậy thì dựa theo những chuẩn đã có, đừng sáng tạo. Ae dev nên theo:

  • Về lý thuyết mật mã, NIST công bố rất nhiều tài liệu hữu ích về tiêu chuẩn: symmetric encryption thì khoá phải ít nhất bao nhiêu, RSA key length thế nào, ECC dùng những curve nào…. Nếu đọc sẽ tránh những lỗi ngớ ngẩn như app covid dùng khoá RSA 512 quá ngắn nó brute force 2 tiếng là xong.
  • Về protocol, RFC là nguồn tài liệu tuyệt vời. AuthN/AuthZ thế nào (Oauth2), communication between client<->server thế nào (JWS/JWE), rồi cả những tài liệu chi tiết tầng dưới như TLS1.2, 1.3… Để thiết kế tốt hơn, mình phải hiểu rõ hiện tại như thế nào đã (với app thông thường mình nghĩ cứ 99% áp dụng là ngon, app nào chuyên bảo mật thì toàn cao thủ rồi ko phải dạy :D)
  • Về cách implement: lời khuyên là đừng tự implement crypto primitive. Hãy dùng những thư viện có sẵn từ OS (Apple/Google/Microsoft cung cấp rất nhiều từ OS của họ) hoặc các 3rd uy tín (như OpenSSL hoặc tool từ OWASP). Nếu app bạn rất thông thường nhưng muốn thuật toán về crypto OpenSSL ko support, nên đặt câu hỏi ngược lại là mình có thực sự cần không?
  • Những tool scan code cũng rất tốt cho review. Nếu có redteam hay pentester thì tốt rồi, nếu không thì cài những tool scan code cho hook vào project trước khi big release cũng được.

Ví dụ evaluate process:

Bạn có 1 system đơn giản: app mobile và API.
Giờ giữa app và API, để thông tin trao đổi secure, cứ dựa trên https.
Bạn muốn thiết kế user login, protect resource: vậy thì apply Oauth2 vào.
Bạn muốn more secure, Oauth2 token có thể bị đánh cắp từ session này sang -> token binding, chuyển từ Bearer token sang Pop token.
Bạn có những thông tin quan trọng hơn nữa cần bảo mật, lúc này cần phân tích sâu về use cases. Phải thật rõ ràng bạn muốn đạt được điều gì và khả năng setup của hệ thống bạn ntn.
  • Thông tin ai cũng xem đc nhưng ko ai temper đc?
  • Thông tin ko muốn ai xem, chỉ có mình và server?
  • Key setup thế nào, pre-shared hay wrap hay key agreement? Ai tạo key, ai giữ key, ai có quyền dùng key…

Security ko chỉ làm 1 cái là xong nghỉ luôn. System của bạn phát triển thì security cũng cần được nâng cấp. Nên có lịch định kỳ threat model, protocol security review, scan code,… để đảm bảo an toàn. Mỗi lần nên rotate người, có góc nhìn mới. Nếu ko thì lại: ồ giống lần trc, ko có gì giải tán sớm.

Đấy là cách chỗ mình làm handle security. Ae chém cho vui, đời dev cứ chém là vui.

Phạm trù bảo mật cho 1 ứng dụng khá rộng :haha: Từ việc bảo mật tầng network, đến bảo mật các service, việc tích hợp với 3rd-party.

Nên bác có thể nói rõ hoặc chia sẻ hơn về mặt bảo mật cho ứng dụng, tạm thời nên giới hạn ở website application nhé.

Ví dụ như em có đọc 1 page github https://github.com/donnemartin/system-design-primer#security

Security
This section could use some updates. Consider contributing!

Security is a broad topic. Unless you have considerable experience, a security background, or are applying for a position that requires knowledge of security, you probably won't need to know more than the basics:

- Encrypt in transit and at rest.
- Sanitize all user inputs or any input parameters exposed to user to prevent XSS and SQL injection.
- Use parameterized queries to prevent SQL injection.
- Use the principle of least privilege.

Ví dụ phần Encrypt in transit and at rest. khi triển khai api cho resful như nào, có phần gì cần chú ý hay không ?

Phần dưới này nữa

threat model, protocol security review, scan code
 
làm sao chống hacker dịch ngược mã nguồn , đọc mã nguồn rồi crack, hack nhỉ
 
làm sao chống hacker dịch ngược mã nguồn , đọc mã nguồn rồi crack, hack nhỉ
Thớt người ta đang chia sẻ cách chống hack networking server với web app, mobile app
Chứ ngành viết software Windows App ở Việt Nam giờ không thịnh hành, ít việc làm nên không có câu trả lời đâu mà hỏi câu này. Qua forum Trung Quốc, forum Nga mà hỏi
Mà cách chống crack software Windows App đơn giản nhất cũng là giao tiếp với server như game Diablo 3 là khỏi crack, khỏi hack, có thế thôi, server tính toán 1 phần rồi trả kết quả cho client, mời anh crack :shame:
 
Thớt người ta đang chia sẻ cách chống hack networking server với web app, mobile app
Chứ ngành viết software Windows App ở Việt Nam giờ không thịnh hành, ít việc làm nên không có câu trả lời đâu mà hỏi câu này. Qua forum Trung Quốc, forum Nga mà hỏi
Mà cách chống hack software Windows App đơn giản nhất cũng là giao tiếp với server là khỏi hack, có thế thôi, server tính toán hết rồi trả kết quả cho client, mời anh hack :shame:
nếu chơi trò đẩy hết lên server , xong làm 1 đống mã hóa 1 chiều thì xong thôi có gì phải bàn nhỉ, chắc bàn ở đây là quy định, quy tắc mà bọn viết lib đề và bắt người dùng lib của nó phải tuân theo,hoặc thuật toán mã hóa ( mà thuật toán mã hóa thì cũng nhiều tùy nhu cầu mà sài) tôi nghĩ bảo mật là phải đào sâu vào phần attack, pentest hơn nó mới thú vị

à tiện đây tôi muốn hỏi, ví dụ : 1 game online thì giữa client-server nó đưa đẩy dữ liệu, giờ có 1 thằng mitm nó lặp lại packet thì có cách nào gọn gàng nhất để chống lại việc đó ko, hoặc có cách nào để phát hiện client đang dùng proxy ko?
 
nếu chơi trò đẩy hết lên server , xong làm 1 đống mã hóa 1 chiều thì xong thôi có gì phải bàn nhỉ, chắc bàn ở đây là quy định, quy tắc mà bọn viết lib đề và bắt người dùng lib của nó phải tuân theo,hoặc thuật toán mã hóa ( mà thuật toán mã hóa thì cũng nhiều tùy nhu cầu mà sài) tôi nghĩ bảo mật là phải đào sâu vào phần attack, pentest hơn nó mới thú vị

à tiện đây tôi muốn hỏi, ví dụ : 1 game online thì giữa client-server nó đưa đẩy dữ liệu, giờ có 1 thằng mitm nó lặp lại packet thì có cách nào gọn gàng nhất để chống lại việc đó ko, hoặc có cách nào để phát hiện client đang dùng proxy ko?
Việc phát hiện proxy là có thể trong 1 số trường hợp, chủ yếu là việc check database xem địa chỉ nguồn là proxy, vpn, tor exit node hay hosting provider. Có 1 số bên cung cấp db để check việc này. Ngắn gọn là ko thể phát hiện proxy ở mức 100%, có thể được, có thể không.

Quay lại bài toán thì nhà phát hành game sẽ tính toán xem có thực sự cần làm việc này không? Nếu user chỉ dùng 1 proxy để giảm ping hoặc gì đó thì có thể ko cần xử lý gì cả. Còn nếu việc này gây hại cho game thì mới cần xử lý?
 
Nice!
Có 1 câu hỏi như này cho chủ thớt và anh em chém gió cho vui, với cũng muốn nghe xem cty các bạn handle như nào.
Db của 1 cty thì bao giờ cũng sẽ có 1 số ít nắm quyền super user, ví dụ devops/CTO chẳng hạn.
Bạn làm thế nào để có thể đảm bảo dc với khách hàng, v.v… rằng sẽ hạn chế nhất tình huống những ng nắm account super user này can thiệp ngầm vào DB nhằm mục đích cá nhân?
Đôi khi có những chỉnh sửa nho nhỏ trên 1 record cũng có thể trục lợi hàng ngàn đô rồi. Ng ảnh hưởng trực tiếp sẽ là khách hàng hoặc chính công ty.
Phúc cho ai không thấy mà tin :boss:

j/k: chiều đi cafe cũng có 1 người hỏi mình về vấn đề này, ko biết có làm cùng cty với bác ko đấy :))=))
 
Phúc cho ai không thấy mà tin :boss:

j/k: chiều đi cafe cũng có 1 người hỏi mình về vấn đề này, ko biết có làm cùng cty với bác ko đấy :)):LOL:

lol, đúng là gần đây có mang vấn đề này đi trao đổi với 1 số người :v cả trong cty lẫn ngoài :))
có khi ng quen thật đấy.
 
lol, đúng là gần đây có mang vấn đề này đi trao đổi với 1 số người :v cả trong cty lẫn ngoài :))
có khi ng quen thật đấy.
hỏi thêm, có phải Client là 1 cty ko, và Boss cty đó đặt vấn đề đó với bên triển khai giải pháp.
thêm thông tin: cty đó đang có ý định chuyển đổi số.
 
hỏi thêm, có phải Client là 1 cty ko, và Boss cty đó đặt vấn đề đó với bên triển khai giải pháp.

À ko, vấn đề này mình trao đổi với 1 CTO của 1 công ty khác, ông ấy có nói vụ này, nên mang đi hỏi mấy anh em khác xem ở các cty khác có xử lý vụ này ko thôi :)
 
À ko, vấn đề này mình trao đổi với 1 CTO của 1 công ty khác, ông ấy có nói vụ này, nên mang đi hỏi mấy anh em khác xem ở các cty khác có xử lý vụ này ko thôi :)
cty to có uy tín rồi thì thường tuân thủ theo cam kết thôi chứ khách hàng họ thuê mình là cũng tin mình rồi (nghi thì không dùng, dùng thì không nghi), nhân viên làm việc thì cũng phải ký cam kết bồi thường hết, đã từng làm 1 công ty mà team ops fetch data thật của khách hàng lên cho mình debug luôn, cũng hơi shock là họ có quyền đấy
soilzx9.png
 
cty to có uy tín rồi thì thường tuân thủ theo cam kết thôi chứ khách hàng họ thuê mình là cũng tin mình rồi (nghi thì không dùng, dùng thì không nghi), nhân viên làm việc thì cũng phải ký cam kết bồi thường hết, đã từng làm 1 công ty mà team ops fetch data thật của khách hàng lên cho mình debug luôn, cũng hơi shock là họ có quyền đấy
soilzx9.png

cái vấn đề là giải pháp thím ạ. Ví dụ khách hàng đưa ra thắc mắc thì mình phải trả lời sao cho thuyết phục dc họ. Từ đó mới có cơ sở để gây dựng niềm tin.
Còn bồi thường các kiểu là khi chuyện đã xảy ra, thì khi đó uy tín của công ty đã bị ảnh hưởng rồi.
Và chuyện đấy cũng lằng nhằng lắm, đâu phải cứ bồi thường là xong.
 
cái vấn đề là giải pháp thím ạ. Ví dụ khách hàng đưa ra thắc mắc thì mình phải trả lời sao cho thuyết phục dc họ. Từ đó mới có cơ sở để gây dựng niềm tin.
Còn bồi thường các kiểu là khi chuyện đã xảy ra, thì khi đó uy tín của công ty đã bị ảnh hưởng rồi.
Và chuyện đấy cũng lằng nhằng lắm, đâu phải cứ bồi thường là xong.

Chẳng có cách nào cả. :rolleyes:

Dev nhét code lấy data ngầm thì... :sleep:
 
cái vấn đề là giải pháp thím ạ. Ví dụ khách hàng đưa ra thắc mắc thì mình phải trả lời sao cho thuyết phục dc họ. Từ đó mới có cơ sở để gây dựng niềm tin.
Còn bồi thường các kiểu là khi chuyện đã xảy ra, thì khi đó uy tín của công ty đã bị ảnh hưởng rồi.
Và chuyện đấy cũng lằng nhằng lắm, đâu phải cứ bồi thường là xong.
Giải pháp thì chắc là audit data + alert khi dữ liệu được truy cập. Có mấy cái này thì đám malicious insider sẽ sợ hơn.
 
nếu gây hại thì xử lý như thế nào thím?
Thì ban thôi thím.
Thực ra với bài toán game online thì người ta sẽ quan tâm hơn đến việc hack/cheat, hay là sử dụng 3rd party software các kiểu. Mấy cái này thì thường sẽ tìm ra được qua việc phân tích log hành động của người dùng.
Ví dụ như cái trò hack speed của MU online ngày xưa chẳng hạn, nếu phía server chịu khó check log 1 chút là thấy ngay việc player move/attack với tốc độ vô lý => ban thôi
 

Thống kê chủ đề

Ngày tạo
botmingoc,
Người trả lời cuối
tunghm,
Trả lời
37
Lượt xem
6.275
Quay lại
Lên đầu trang