ãããã®1ã€ãã³ãã¥ããã£ãšå ±æããããšæããŸãã ç§ã«ãšã£ãŠãä»ã®ã»ãã¥ãªãã£ã¬ãŒããšåæ§ã«ãã€ã³ãã©ã¹ãã©ã¯ãã£ãšå€éšãšã®éä¿¡ã確èªããŠç解ããããšãéèŠã§ãã æãèå³æ·±ããã®ã®1ã€ã¯ãã¿ããã®ãããã¯ãŒã¯ïŒTorïŒãšã®éä¿¡ã§ãã
ãã¡ãããELKã¯ã¹ã¿ãã¯ã«éå®ããããæ å ±ãä¿åããã³åŠçããããã®åãªãããŒã«ã§ãã ããã«åºã¥ã補åã®æå¹æ§ã¯ãã©ããã§ååŸããå¿ èŠãããããŒã¿ã«ãã£ãŠæ±ºãŸããŸãã ç§ã®å Žåãããã¯ãããã¯ãŒã¯ããã€ã¹ããçŽæ¥åä¿¡ããçã®NetflowããŒã¿ã§ãããããã€ã³ããªãžã§ã³ããªã³ã¬ã¯ã¿ãŒã«ããäºååŠçã¯è¡ãããŸããã ãã®ã¢ãããŒãã«ã¯é·æãšçæããããŸãããããã«ã€ããŠã§ã¯ãããŸããã
ããšãã°ãåºåã¯ããã次ã®æ å ±ã§ãã
ãã®äŸã§ã¯ãæãèå³æ·±ããã£ãŒã«ãã®ã¿ã衚瀺ãããNetflowãä»ããŠåä¿¡ããæ å ±ã®ã»ãšãã©ã¯çç¥ãããŠããããšã«æ³šæããŠãã ããã ç§ã®æèŠã§ã¯ãäž»ãªå©ç¹ã®1ã€ã¯ãã¹ããªãŒã å ã®ãã©ãã£ãã¯ã®éã«é¢ããããŒã¿ãæäœã§ããããšã§ãã
ãã£ã«ã¿ãŒãäœæãã
ãã§ã«ãã®æ®µéã§ãTorãããã¯ãŒã¯ãšã®éä¿¡ã®åé¡ã«1ã€ã®æ³šæäºé ãããããšãäºçŽããããšæããŸãã æ®å¿µãªãããããªããšç§ã«ã¯Torãããã¯ãŒã¯ããã®ãã©ãã£ãã¯ã®ã¿ãç¹å®ããæ©äŒããããŸãããToãããã¯ãŒã¯ã«ã¯ç¹å®ã§ããŸããã torprojects.orgã³ãã¥ããã£ã¯ExitããŒãã®ãªã¹ãã®ã¿ãæäŸããŸãããEntryããŒãã®ãªã¹ããäžæã«èå¥ã§ããªããšãããããã¯ã«é¢ããããã€ãã®ãããã¯ã«åºäŒããŸããã
ãããã¯ãŒã¯ã«ã¯ãããããçä¿¡TorããŒãã説æãããªã¹ãããããŸãããæ®å¿µãªãããã®æ å ±ã«ã¯ä¿¡é Œæ§ããããŸããã åºå£ããŒãã®ä¿¡é Œã§ãããªã¹ãã¯ã次ã®ãªã³ã¯ã§å ¥æã§ããŸãïŒ https : //check.torproject.org/exit-addresses ã ãã®çµæãç§ãã¡ã¯Torããã®ãã©ãã£ãã¯ã§ã®ã¿åäœããŸãã
次ã«ãELKå ã§ãã®æ å ±ã䜿çšããæ¹æ³ã«ã€ããŠèª¬æããŸãã ããŒã¿ã¹ããªãŒã å šäœããTorãããã¯ãŒã¯ããã®ãã©ãã£ãã¯ããã£ã«ã¿ãªã³ã°ããã«ã¯ã次ã®ã·ããªãªã«åŸã£ãŠæ§ç¯ããããã£ã«ã¿ãŒãäœæã§ããŸãã
( '1st.Exit.Node.IP' OR '2nd.Exit.Node.IP' OR .... 'Last.Exit.Node.IP' ) AND my_regex
å¿ èŠã«å¿ããŠããANDãã®åŸã«ãã£ã«ã¿ãŒã«çµã蟌ã¿ãè¿œå ããŸãã ãã£ã«ã¿ãŒã®ããã©ãŒãã³ã¹ã確èªããã«ã¯ãbashã䜿çšããŠæ§é ïŒäžå€®ã«ãORããä»ããããŒãã®çµäºïŒãæåã§äœæããæ€çŽ¢ãæ£ããæ©èœãããã©ãããã¯ãªããããŒãã§ç¢ºèªããŸãã
curl -XGET https://check.torproject.org/exit-addresses | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ OR /g'
ãªã¹ãã¯å€§ãããããElasticSearchã®ããã©ã«ãèšå®ã§ã¯ããŒã«æŒç®åã®äœ¿çšãå€ããããšæèšã§ããããã次ã®èšå®ã§/etc/elastcisearch/elasticsearch.ymlã®å¶éãå¢ãããŠããŒã¢ã³ãåèµ·åããŸãã
indices.query.bool.max_clause_count: 2048
ElasticSearchã®åŒ·åãªæ©èœã¯ãèŠæ±ãããæ å ±ããã°ãããã£ã«ã¿ãªã³ã°ãããããçµæã¯éåžžã«é«éã§ãã Kibanaã§æ€çŽ¢ãšããŠä¿åããŠäœ¿çšããŸãã çè«äžãç§ãã¡ã¯ã¿ã¹ã¯ãéæããŸãã-ããªãã®ç®ã®åã®ã¿ããã®ãããã¯ãŒã¯ããã®éä¿¡ã
ã»ãšãã©ã®å Žåã1æé以å ã«ãããã¯ããã€ãã®ã¹ã¬ããã«ãªããŸããããããããèå³æ·±ããã®ã§ãã
ãã£ã«ã¿ãŒãæŽæ°
åé¡ã¯ãExitããŒãã®ãªã¹ãã«äžè²«æ§ããªããããäžå®ã®èŠåã§æŽæ°ããããšããå§ãããŸãã æåã®æ¹æ³ã¯é©åã§ã¯ãããŸããã çè«çã«ã¯ãæ€çŽ¢ãã£ã«ã¿ã®å€ãšãã®èå¥åãå«ãKibanaã€ã³ã¿ãŒãã§ã€ã¹ãžã®POSTãªã¯ãšã¹ãã®æ£ãã圢åŒãèŠã€ããããšãã§ããŸãã ãããã£ãŠãWebèŠæ±ãçæããã«ã¯ããªã¹ããæŽæ°ããŸãã ãããããã䟿å©ãªãªãã·ã§ã³ããããŸãã
Kibanaã¯ããªããžã§ã¯ãã«é¢ãããã¹ãŠã®æ å ±ãåãElasticSearchã¯ã©ã¹ã¿ãŒã®ã·ã¹ãã ã€ã³ããã¯ã¹ã.kibanaãã«ä¿åããŸãã ããã§ãExitããŒãã®ãªã¹ããå«ãã以åã«äœæãããæ€çŽ¢ã¯ãšãªã説æããããã¥ã¡ã³ããèŠã€ããããšãã§ããŸãã
ãããã£ãŠãæ å ±check.torproject.org/exit-adressesã«åŸã£ãŠãã®ç¹å®ã®ããã¥ã¡ã³ãã®ãã¯ãšãªããã£ãŒã«ããæŽæ°ããå¿ èŠããããŸãã ãããè¡ãããã«ãPythonã¹ã¯ãªãããã¢ããããŒãããŸãã ãçŸåšã®ããŒãžã§ã³ã¯ãã¡ãã«ãããŸã ã åèã®ããã«ããã¿ãã¬ã®äžã§ãçŸæç¹ã§ææ°ããŒãžã§ã³ãæäŸããŸãã
å°æ¬
#!/usr/bin/env python # ----- README STARTS -------- # # If anyone wants to use this script in their environment # be sure to replace YOUR_SEARCH_ID with actual search ID # within the curl command URL at line 70. # # Also 'post_body' variable at line 63 should be tuned according # to your query, as it is build assuming there's some specific static # expressions from the beginning and the of query.json file. # See: https://github.com/dtrizna/my_ELK_scripts/blob/master/TOR_SEARCH/query.json # # Additionaly set correct path to query.json file # at lines 65 and 70, replacing <PATH/TO/> entries. # # ----- README ENDS ---------- import re import requests import subprocess # ------------------------- # GET THE LIST WITH TOR EXIT NODES FROM TORPROJECT WEB PAGE nodes_raw = requests.get('https://check.torproject.org/exit-addresses') nodes_raw_list = nodes_raw.text.split() # ------------------------- # FILTER FROM WHOLE PAGE ONLY IP ADRESSES regex = re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}') nodes = filter(regex.search, nodes_raw_list) # ------------------------- # IP ADRESSES ARE IN UNICODE FORMAT, ENCODE THEM TO STRING search_query = '' i = 0 while i < len(nodes): try: nodes[i] = nodes[i].encode('ascii') except UnicodeEncodeError as err: print "Error due to IP adress encoding from Unicode to ASCII." print "UnicodeEncodeError says: {}".format(err) i = i + 1 # ------------------------- # CREATE KIBANA SEARCH QUERY search_query = " OR ".join(nodes) # ------------------------- # UPDATE FILE, THAT WILL BE USED AS BODY IN UPDATE COMMAND # (CAN'T USE DIRECTLY, ES RETURNS ERROR, WORKS ONLY THROUGH FILE USING CURL) with open('query.json', 'r') as file: data = file.readlines() # 'data' is list, every element describes line in file called in above cycle # As there's only one line(it must be onelined, for ES to accept it), # data[0] represents all the future POST body request. # It has fixed values from the beginning and the end of line. # Although middle part may vary depending on request to tor website above. post_body = data[0][:127] + search_query + data[0][-258:] with open('<PATH/TO/>query.json', 'w') as file: file.writelines(post_body) # ------------------------- # FINALY MAKE THE UPDATE REQUEST TO ELASTICSEARCH AND SEE REPLY call = subprocess.Popen("curl -XPOST http://localhost:9200/.kibana/search/YOUR_SEARCH_ID/_update?pretty=true -d@<PATH/TO/>query.json", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (result, error) = call.communicate() print('Result is:\n {}\n'.format(result)) print("Error is: (if there's connection statistics - it's OK!)\n {}".format(error))
ã¹ã¯ãªããã¯ExitããŒãã®ãªã¹ããåãåããããã«åºã¥ããŠæ€çŽ¢ãªããžã§ã¯ãã®ãã¯ãšãªããçæããŸãã ããã¥ã¡ã³ããæŽæ°ããããã«ãPython APIãå®å šã«åäžã®ãªã¯ãšã¹ãã§ãElasticSearchã解決ã§ããªãã·ãªã¢ã«åãšã©ãŒãååŸããããããã«ãŒã«ãOSãåŒã³åºãå¿ èŠããããŸããã ãcurlãã¯query.jsonãã¡ã€ã«ã䜿çšããŸãããã®ãã¡ã€ã«ãžã®ãã¹ã¯ã¹ã¯ãªããã§æå®ããå¿ èŠããããŸãã äžè¬ã«ãREADMEã®èŠå®ã«åŸã£ãŠã³ãŒãã調æŽãããã®åŸãã¹ã¯ãªããããµãŒããŒã®crontabã«ããããããåçã«æŽæ°ãããæ€çŽ¢çµæãååŸããŸããããã¯åŸã§äœ¿çšã§ããŸãã
ãã©ãã£ãã¯èªäœãåæããŸã
æåã«ç®ã«ããã®ã¯ããã¡ããè€æ°ã®ã¹ãã£ã³ã§ãã äžè¬çã«ã¯ãã¡ãããã©ãããã§ãTorãã絶ããã¹ãã£ã³ãããŸãã 圌ãã¯OSIã®ç¬¬4ã¬ãã«ãWebã¢ããªã±ãŒã·ã§ã³ãããã³ãã®ä»ãã¹ãŠã§ãªãã¹ã³ããŸãã ãããã£ãŠããã¡ã€ã¢ãŠã©ãŒã«ã®åã§ã¯ãªãåéããããããã¯ãŒã¯æ å ±ãåæããããšããå§ãããŸãã ãŸããå éšã«å ¥ããªãã£ããã®ã¯ãã¹ãŠäžæããã次ã«ãå éšããŒãã®ãã§ã«å€æãããã¢ãã¬ã¹ã衚瀺ãããŸãã
2çªç®-ããŒã¿ã®å€§éšåã¯ããããã¯ãŒã¯äžã®ãµãŒãã¹ã«å¯Ÿããå®å šã«æå¹ãªèŠæ±ã§ãã ä»æ¥ã§ã¯ããããã¯ãŒã¯ã®äœ¿çšãå¿ååããã®ãæ®éã§ãããã®ãããTorããã®éä¿¡ã«ã¯äž»ã«æã人æ°ã®ãããµãŒããŒãžã®æ¥ç¶ãå«ãŸããŸãã ãã¡ãããäžéšã®çµç¹ïŒãŠãŒã¶ãŒã¯ãŠãŒã¶ãŒãå¿ èŠãšãã以äžã®ãã®ãå¿ èŠãšããŠããïŒãããã®éä¿¡ãããã¯ããããšãã欲æ±ãæã€å¯èœæ§ããããŸãã 確ãã«ãã®ãããªå ŽåããããŸãã ããããç§ã¯ãã€ã³ã¿ãŒãããã³ãã¥ããã£ã®çºå±ã®ãã®åéãå¶éããæš©å©ã¯ãªãã®ã§ããã®ãã©ãã£ãã¯ãç解ããããšãåŠã¶å¿ èŠããããšèããŠããŸãã
以åã®ã°ã«ãŒãã®äž¡æ¹ã«ç¹å¥ãªæ³šæãæãå¿ èŠã¯ãããŸãããããããèªèããéãéããããšãåŠã³ãŸãã ãã ããããã ãã§ã¯ãããŸããã æ£ããåæã¯ãèå³æ·±ãäºå®ãã¿ã€ã ãªãŒã«æããã«ããããšãã§ããŸãã
ãããããããã·ã³ã§ããããšæšçåæ»æã§ããããšããããã¯ãŒã¯äžã®æ»æè ã®åœ±é¿ããã§ã«åããŠããCïŒCïŒã³ãã³ãïŒã³ã³ãããŒã«ïŒããŒãã®ãã©ãã£ãã¯ããã§ãã¯ããŸãã
ååãšããŠã以äžã®éä¿¡ã®äž¡æ¹ãCïŒCã«ã€ããŠåæããå¿ èŠããããŸãã
- ããã©ã«ãã§pingããã倧ããICMPãã±ããã
- åãçç¶ã®DNSéä¿¡-éæšæºã®å€§ããªãã±ããã
äž¡æ¹ã®ãµãŒãã¹ã¯ãæšçãšãªãé«åºŠãªæç¶çè åšæ»æã®å Žåã§ãããã©ãã£ãã¯ããã³ãã«ããããã«ãäŸç¶ãšããŠç©æ¥µçã«äœ¿çšãããŠããŸãã æè¿ã®æãé¡èãªäŸã®1ã€ã¯ãããšãã°ãå°æ¹Ÿã®æåã®éè¡ã«å¯Ÿããæ»æã®å Žåã®Cobaltã°ã«ãŒãã®è¡åïŒ ãªã³ã¯ ïŒã§ãã
ãŸããéæšæºã®WebèŠæ±ã«æ³šæããããšããå§ãããŸãã ãã£ã«ã¿ãªã³ã°ããããšã¯ããå°é£ã«ãªããŸããããŸã ããã€ãã®ãªãŒãããå§ãããŸãã
çŸåšããã¹ãŠã®åãCïŒCã®å€§éšåãWebãééããŠããŸããããã¯ããã®ãã©ãã£ãã¯ãããããçµç¹ã®ããããçµç¹ã§èš±å¯ãããŠããããã§ãã ãããã£ãŠãååãšããŠããããã¯ãŒã¯ããWeb以å€ã®ãµãŒããŒã«æ¥ç¶ãããŠããTCP 80ããã³443ã¯èå³æ·±ããã®ã§ãã
ãŸããããŸã人æ°ã®ãªãWebãµãŒããŒã察象ãšããã¯ãšãªã«ã泚æããŠãã ããã ç¹ã«ããªãŒãã³ãœãŒã¹ãã¬ãŒã ã¯ãŒã¯ã«åºã¥ãããã®ãããå Žåãç¹ã«ãã©ãã£ãã¯éãæšæºãè¶ ããŠããå Žåã ããã«éææ§ãé«ããã«ã¯ãåãElasticSearchã€ã³ããã¯ã¹ã«ãã®ãããªãµãŒããŒãŸãã¯WAFã®ãã°ãå ¥åããHTTPãã£ãŒã«ããšå€ã«ãªã¯ãšã¹ãèªäœãçŽæ¥å«ãŸãã䞊åèŠèŠåãŠã£ã³ããŠã確èªããŸãã
ELKã䜿çšããããŒã¿åæ
æ ¹æ ã«ãªããªãããã«ãELKã¹ã¿ãã¯ã§ãã®ãããªããŒã¿åæãæé©åããæ¹æ³ã瀺ããŸãã ããšãã°ãåéãããããŒã¿ã«åºã¥ããŠICMPãŸãã¯DNSãã³ããªã³ã°ã®è©Šã¿ãè¿ éã«ç¹å®ããããšããè©Šã¿ã«æ²¡é ããŸãã
æ å ±ã¯ãã¹ãŠã°ã©ãã£ã«ã«åœ¢åŒã§èªèãããã®ã§ããã©ãã£ãã¯éã®ç¹ã§æšæºãè¶ ããICMPéä¿¡ã®èŠèŠåãäœæããããšããŸãã éåžžã®ICMPæäœããããã¢ããããªãããã«ãããã¯ãŒã¯äžã®ã¢ã¯ãã£ããªãã©ãã£ãã¯ã芳å¯ããããšã§åºæºã決å®ããŸãããã¹ã¯ãªãããåããããšããããICMPãã±ããã§ã³ãã³ãã®åºåãéä¿¡ããããšãããšããã£ãããããå¯èœæ§ããããŸãã ã¹ããªãŒã ããšã«2KBãè¶ ããå€ã«æ±ºããŸããã åã®æ€çŽ¢ãããã®ãã©ãã£ãã¯ãååŸããã«ã¯ãæ°ãããã©ãã£ãã¯ãäœæããæåŸã«æ¬¡ã®ãã¿ãŒã³ãè¿œå ããŸãã
netflow.in_bytes: {2000 TO *} AND netflow.protocol: 1
次ã«ãèŠèŠå>åã°ã©ããéžæããŸãã æ¡åŒµæ€çŽ¢ã®ã¿ãããŒã¿ãœãŒã¹ãšããŠéžæãããŸãã
ã»ã¯ã¿ãŒã®è§åºŠã決å®ããããã®ãã©ã¡ãŒã¿ãŒãšããŠããã©ã¡ãŒã¿ãŒ 'netflow.in_bytes'ã®åèšãæå®ããŸãã
å®å IPã¢ãã¬ã¹ã«ãã£ãŠãã€ãã»ã¯ã¿ãŒã«åå²ããå¿ èŠãããããšã瀺ããŸãã
Torãããã¯ãŒã¯ã®å Žåãéä¿¡å ã¢ãã¬ã¹ã¯äœãèšããªãã®ã§ïŒåãéä¿¡ãè€æ°ã®ã¢ãã¬ã¹ã§è¡ãããå¯èœæ§ãããããïŒãæ¥ç¶ã¯ãããã¯ãŒã¯äžã®ã¢ãã¬ã¹ã«ãã£ãŠèå¥ãããŸãã ããããã¹ããªãŒã ãèå¥ããã®ã«äŸ¿å©ãªããã«ãTorãããã¯ãŒã¯ã®ããŒãã¢ãã¬ã¹ã瀺ããããã€ã®2çªç®ã®ã¬ãã«ãäœæããŸããã
1ã€ã®ãã¥ã¢ã³ã¹ã«æ³šæããã-é·ãæéããããã25 +ã®äžæ¹åã®ãã±ããæ°ãåéããéåžžã®pingããåè¿°ã®æ€çŽ¢ãã©ã¡ãŒã¿ãŒã«è©²åœããŸãã
å¥ã®æé©åãå®è¡ã§ããŸã-Kibanaã§æåã§1ã€ã®ç¹å®ã®Netflowã¹ããªãŒã ã®ãã±ãããããã®ãã€ãæ°ã衚瀺ãããã£ãŒã«ããäœæããŸãã ãããè¡ãã«ã¯ã[ã¹ã¯ãªãããã£ãŒã«ã]ã»ã¯ã·ã§ã³ã§ãçã¿ã®ãªãèšèªã§æ¬¡ã®ã¿ã¹ã¯ãå®è¡ãããŠããããäœæããŸãã
doc['netflow.in_bytes'].value / doc['netflow.in_pkts'].value
ãã®ãã£ãŒã«ããæ€çŽ¢ã«è¿œå ãããšãæ å ±ã衚瀺ãããšãã«ãæšæºãµã€ãºã®ãã±ãããããã«é€å€ã§ããŸãã æ®å¿µãªããããã®ãã£ãŒã«ãã§ã¹ããªãŒã ããã£ã«ã¿ãªã³ã°ããããšã¯ã§ããŸãã; Kibanaã¯ãã£ãŒã«ããäœæãããšãã«ãããå ±åããŸãïŒ
ãããã®ã¹ã¯ãªãããã£ãŒã«ãã¯ãããŒã¿ãããã®å Žã§èšç®ãããŸãã ããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³ã§äœ¿çšããŠããã¥ã¡ã³ãã«è¡šç€ºã§ããŸãããæ€çŽ¢ããããšã¯ã§ããŸããã ããã§ãããã管çããå¿ èŠã«å¿ããŠæ°ãããã®ãè¿œå ã§ããŸãããã¹ã¯ãªããã«ã¯æ³šæãå¿ èŠã§ãã
ãã ããããã·ã¥ããŒãã§ã¯ãèŠèŠåã®åŽã«æ€çŽ¢ããã®æ å ±ãçŽæ¥é 眮ããããŒã¿ããããã§ããŸãã
çµæã¯æ¬¡ã®ãšããã§ãã
ã»ã¯ã¿ãŒãåºãã»ã©ãIPã¢ãã¬ã¹ãåä¿¡ããããŒã¿ãå€ããªããŸãã ãŸãããã®äŸã§ã¯ããã¹ãŠã®ICMPã¹ããªãŒã ãæšæºã®ãã±ãããµã€ãºãæã£ãŠããããšãããã«ããããŸãã
åæ§ã®åæã¯ã1KBãè¶ ããã¹ããªãŒã ã§è§£æ±ºããDNSéä¿¡ã«ãé©ããŠããŸãã æ€çŽ¢ãä¿®æ£ãã次ã®ã¯ãšãªãè¿œå ããŠãåãæäœãå®è¡ããŸãã
netflow.in_bytes: {1000 TO *} AND netflow.protocol: 17 AND ( netflow.l4_dst_port: 53 OR netflow.l4_src_port: 53 )
ããããããããã¯ãŒã¯å ã®ç¹å®ã®ããŒãïŒç£èŠãµãŒããŒãŸãã¯DNSãµãŒããŒïŒããç§ãææ¡ããäŸã«å ¥ãå¯èœæ§ããããŸãããã¡ããããããããã£ã«ã¿ãŒã§åãé€ããŸãã ãã®çµæãçŸåšã®ãµãŒãã¹ã®åå·®ã瀺ãæ確ãªç»åãåŸãããŸãã äžè¬ã«ããããã®ãµãŒãã¹ã®ãã®ãããªåæã¯ãTorããã®ãã©ãã£ãã¯ã ãã§ãªãå®è¡ããå¿ èŠãããããããã®ã¢ãããŒãã¯äžè¬ã«ElasticSearchãåä¿¡ãããã¹ãŠã®æ å ±ã«é©çšã§ããŸãã
çµè«ãšããŠ
ãã¡ããããã®æ å ±ã®å¯èœãªåæã®ãªã¹ãã¯å®å šã§ãããšäž»åŒµããŠããŸããã ããã¯åãªãè¡šé¢çãªäŸã§ãããããã«çºå±ãããããšãæãŸããã èªè ããã®ãããªæ å ±ãåæããæ¹æ³ã説æã§ãããªãããããå ±æããŠãã ãããããã¯ç§ãšã³ãã¥ããã£ã«ãšã£ãŠèå³æ·±ããã®ã«ãªãã§ãããã
ãŸããã»ãšãã©ã®å Žåããããã®ãã³ãã®ããããã¯ãç§ã«ã¯çºçããªãåŒæ°ã«ãã£ãŠïŒãŠãŒãã£ãªãã£ã®é¢ã§ïŒå§åãããå¯èœæ§ããããŸãã ãã®å Žåããããã®è°è«ãéåžžã«èãããã§ãã
ãã¡ãããèªåã®è¡åãå¿ååããããšããæœåšçãªæ»æè ãVPN-Tor-VPNæ¥ç¶ãŸãã¯ããé«åºŠãªè©æ¬ºã䜿çšããŠããå Žåããã®ãã¹ãŠã¯è¡šç€ºãããŸããã ãããã£ãŠãåæ§ã®æ¹æ³ã䜿çšããŠãã€ã³ãã©ã¹ãã©ã¯ãã£å ã®ãã¹ãŠã®ãã©ãã£ãã¯ãåæããããšããå§ãããŸãã ãããããã®æ å ±ã衚瀺ããããšã¯ãã§ã«éåžžã«èå³æ·±ãã§ãã
èªãã§ãããŠããããšãïŒ ããããã/圹ã«ç«ãŠã°å¹žãã§ãã
PSèªè ã®ä¿®æ£ã«åŸã£ãŠè²¬ä»»ãæã£ãŠèšäºãä¿®æ£ããŸãã å人ã®ã¡ãŒã«ã«ã¯ããã¹ãã®å質ã«é¢ããã¡ã¢ãèšå ¥ããŠãã ããããã ããèšäºã®ãããã¯ã«çŽæ¥ã³ã¡ã³ããæ®ãããã«ã³ã¡ã³ããæ®ããŠãã ããã