<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.8.6">Jekyll</generator><link href="https://utkusen.com/blog/feed.xml" rel="self" type="application/atom+xml" /><link href="https://utkusen.com/blog/" rel="alternate" type="text/html" /><updated>2021-05-18T22:21:38+03:00</updated><id>https://utkusen.com/blog/feed.xml</id><title type="html">Utku Sen - Blog</title><subtitle>computer security, programming</subtitle><entry><title type="html">Hash Olympics - A Hash Cracking Contest Without Good Hardware</title><link href="https://utkusen.com/blog/hash-olympics-hash-cracking-contest.html" rel="alternate" type="text/html" title="Hash Olympics - A Hash Cracking Contest Without Good Hardware" /><published>2021-05-17T10:39:08+03:00</published><updated>2021-05-17T10:39:08+03:00</updated><id>https://utkusen.com/blog/hash-olympics-hash-cracking-contest</id><content type="html" xml:base="https://utkusen.com/blog/hash-olympics-hash-cracking-contest.html">&lt;p&gt;I was always a big fan of “Crack The Hash” contests where all participants are given a hash value, some hints and they try to crack it in a short amount of time. I wanted to make a similar contest for my Twitch followers. While hash cracking contests are fun, they require good hardware to be successful. Unfortunately, my followers are mostly students and due to the economic crises in Turkey, they are not able to buy computers with good hardware.&lt;/p&gt;

&lt;p&gt;So, I had to create a contest format in which both rich and poor students can participate equally. It should be a contest of knowledge and hardworking, not money. As a result, I created a format named “Hash Olimpiyatları (Hash Olympics)”. In this format, I announce an attack combination one week before the contest (see details at process and rules section). In one week, the participants are doing analyze and preparing the best lists for the given attack combination. They are not cracking hashes by themselves but they are sending required lists (wordlist, mask, rule) to me before the contest. I’m cracking the hashes in the target database live at Twitch with the lists that they sent.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;contest-process&quot;&gt;Contest Process&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Contest is held with a moderator (streamer) and participants.&lt;/li&gt;
  &lt;li&gt;Moderator finds an actual database leak, removes the PII data and saves the hashes.&lt;/li&gt;
  &lt;li&gt;Name of the leak is not announced before the contest. However, if there is a password policy, it should be announced.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Moderator should define an attack combination by using the elements below (the combination would be different in every contest)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Wordlist size&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Number of Hashcat rules&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Number of Hashcat masks (and its complexity limit)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example combinations:&lt;/strong&gt; 1) A wordlist with 30 passwords, 15 rules, 0 mask - 2) A wordlist with 50 passwords, 10 rules, 1 mask&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Participants should prepare those lists to crack most of the hashes. The lists will be sent to the moderator via e-mail before the contest. An example scenario:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moderator announced the following attack combination: A wordlist with 5 passwords, 5 rules, 1 mask. The participant should send those lists:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;| Passwd.txt | Rules.txt | Mask.txt |
|------------|-----------|----------|
| 123456     | :         | ?l?l?l?d |
| 1234567    | l         |          |
| qwerty     | u         |          |
| 19231923   | c         |          |
| besiktas   | ^X        |          |
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Moderator starts a live stream during the contest&lt;/li&gt;
  &lt;li&gt;Moderator announces the target leak&lt;/li&gt;
  &lt;li&gt;Moderator starts to crack hashes in the leaked database with the lists sent by participants&lt;/li&gt;
  &lt;li&gt;Moderator takes a note of: Number of cracked total hashes, unique hashes and percentages&lt;/li&gt;
  &lt;li&gt;Moderator announces the winner&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;our-experience&quot;&gt;Our experience&lt;/h2&gt;

&lt;p&gt;We run two hash oliympics. It was lots of fun and everything went smoothly. The participants spent one week by analyzing previously leaked databases to create optimal attack combinations.&lt;/p&gt;

&lt;p&gt;In the first contest, the attack combination was: A wordlist of 30 passwords, 15 Hashcat rules, 0 Hashcat mask. The target database was containing 50,000 hashes. The results were very close.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;| Participant     | Total Cracked Hashes| Cracked Hash Percentage|
|-----------------|---------------------|------------------------|
| Mustafa Akbulut | 1206                | %2,687                 |
| Tolunay Yılmaz  | 1196                | %2,665                 |
| Hakan Sonay     | 1194                | %2,660                 |
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In the second contest, I wanted to increase the scope of the attack combination. It was: A wordlist of 50 passwords, 15 Hashcat rules, 1 Hashcat mask (mask had specific limits). The result was very close again. The third and fourth places have only 3 hash differences. It was crazy.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;| Participant     | Total Cracked Hashes | Cracked Unique Hashes | Cracked Hash Percentage |
|-----------------|---------------------|---------------------|----------------------------|
| Ebubekir Türker | 271752              | 44405               | %47,372                    |
| Nur Pabuççu     | 271698              | 44351               | %47,363                    |
| Can Taşdemir    | 271688              | 44341               | %47,361                    |
| Canberk Ayran   | 271685              | 44338               | %47,360                    |
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Hash oliympics was a good experience for both having fun and teaching people how to analyze databases and using the Hashcat efficiently. People who can’t afford good hardware could also have fun. That was my point and we achieved that. You can contact me if you have any questions.&lt;/p&gt;

&lt;div class=&quot;sharebuttons&quot;&gt;
  &lt;hr /&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;p class=&quot;sharetitle&quot;&gt; Share this: &lt;/p&gt;
    &lt;/li&gt;
    &lt;li class=&quot;reddit&quot;&gt;
      &lt;a href=&quot;http://www.reddit.com/submit?url=https://utkusen.com/blog/hash-olympics-hash-cracking-contest.html&amp;amp;title=Hash%20Olympics%20-%20A%20Hash%20Cracking%20Contest%20Without%20Good%20Hardware&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Reddit icon&lt;/title&gt;&lt;path d=&quot;M2.204 14.049c-.06.276-.091.56-.091.847 0 3.443 4.402 6.249 9.814 6.249 5.41 0 9.812-2.804 9.812-6.249 0-.274-.029-.546-.082-.809l-.015-.032c-.021-.055-.029-.11-.029-.165-.302-1.175-1.117-2.241-2.296-3.103-.045-.016-.088-.039-.126-.07-.026-.02-.045-.042-.067-.064-1.792-1.234-4.356-2.008-7.196-2.008-2.815 0-5.354.759-7.146 1.971-.014.018-.029.033-.049.049-.039.033-.084.06-.13.075-1.206.862-2.042 1.937-2.354 3.123 0 .058-.014.114-.037.171l-.008.015zm9.773 5.441c-1.794 0-3.057-.389-3.863-1.197-.173-.174-.173-.457 0-.632.176-.165.46-.165.635 0 .63.629 1.685.943 3.228.943 1.542 0 2.591-.3 3.219-.929.165-.164.45-.164.629 0 .165.18.165.465 0 .645-.809.808-2.065 1.198-3.862 1.198l.014-.028zm-3.606-7.573c-.914 0-1.677.765-1.677 1.677 0 .91.763 1.65 1.677 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm7.233 0c-.914 0-1.678.765-1.678 1.677 0 .91.764 1.65 1.678 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm4.548-1.595c1.037.833 1.8 1.821 2.189 2.904.45-.336.719-.864.719-1.449 0-1.002-.815-1.816-1.818-1.816-.399 0-.778.129-1.09.363v-.002zM2.711 9.963c-1.003 0-1.817.816-1.817 1.818 0 .543.239 1.048.644 1.389.401-1.079 1.172-2.053 2.213-2.876-.302-.21-.663-.329-1.039-.329v-.002zm9.217 12.079c-5.906 0-10.709-3.205-10.709-7.142 0-.275.023-.544.068-.809C.494 13.598 0 12.729 0 11.777c0-1.496 1.227-2.713 2.725-2.713.674 0 1.303.246 1.797.682 1.856-1.191 4.357-1.941 7.112-1.992l1.812-5.524.404.095s.016 0 .016.002l4.223.993c.344-.798 1.138-1.36 2.065-1.36 1.229 0 2.231 1.004 2.231 2.234 0 1.232-1.003 2.234-2.231 2.234s-2.23-1.004-2.23-2.23l-3.851-.912-1.467 4.477c2.65.105 5.047.854 6.844 2.021.494-.464 1.144-.719 1.833-.719 1.498 0 2.718 1.213 2.718 2.711 0 .987-.54 1.886-1.378 2.365.029.255.059.494.059.749-.015 3.938-4.806 7.143-10.72 7.143l-.034.009zm8.179-19.187c-.74 0-1.34.599-1.34 1.338 0 .738.6 1.34 1.34 1.34.732 0 1.33-.6 1.33-1.334 0-.733-.598-1.332-1.347-1.332l.017-.012z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;hn&quot;&gt;
      &lt;a href=&quot;http://news.ycombinator.com/submitlink?u=https://utkusen.com/blog/hash-olympics-hash-cracking-contest.html&amp;amp;t=Hash%20Olympics%20-%20A%20Hash%20Cracking%20Contest%20Without%20Good%20Hardware&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Y Combinator icon&lt;/title&gt;&lt;path d=&quot;M0 24V0h24v24H0zM6.951 5.896l4.112 7.708v5.064h1.583v-4.972l4.148-7.799h-1.749l-2.457 4.875c-.372.745-.688 1.434-.688 1.434s-.297-.708-.651-1.434L8.831 5.896h-1.88z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;twitter&quot;&gt;
      &lt;a href=&quot;https://twitter.com/intent/tweet?via=utkusen&amp;amp;url=https://utkusen.com/blog/hash-olympics-hash-cracking-contest.html&amp;amp;text=Hash%20Olympics%20-%20A%20Hash%20Cracking%20Contest%20Without%20Good%20Hardware&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Twitter icon&lt;/title&gt;&lt;path d=&quot;M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;linkedin&quot;&gt;
      &lt;a href=&quot;https://www.linkedin.com/shareArticle?mini=true&amp;amp;url=https://utkusen.com/blog/hash-olympics-hash-cracking-contest.html&amp;amp;title=Hash%20Olympics%20-%20A%20Hash%20Cracking%20Contest%20Without%20Good%20Hardware&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;LinkedIn icon&lt;/title&gt;&lt;path d=&quot;M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;style&gt;
/* Share buttons */
.sharebuttons {
  margin: 0 auto 0 auto;
}

.sharebuttons ul {
  margin: 20px 0 0 0;
  text-align: center;
}

.sharebuttons ul li {
  display: inline;
}

.sharebuttons ul li a {
  text-decoration: none;
}

.sharebuttons ul li svg {
  width: 40px;
  height: 40px;
}

.sharebuttons .reddit svg {
  fill: #FF4500;
}

.sharebuttons .hn svg {
  fill: #F0652F;
}

.sharebuttons .twitter svg {
  fill: #1DA1F2;
}

.sharebuttons .linkedin svg {
  fill: #0077B5;
}
&lt;/style&gt;</content><author><name></name></author><category term="Security" /><summary type="html">I was always a big fan of “Crack The Hash” contests where all participants are given a hash value, some hints and they try to crack it in a short amount of time. I wanted to make a similar contest for my Twitch followers. While hash cracking contests are fun, they require good hardware to be successful. Unfortunately, my followers are mostly students and due to the economic crises in Turkey, they are not able to buy computers with good hardware. So, I had to create a contest format in which both rich and poor students can participate equally. It should be a contest of knowledge and hardworking, not money. As a result, I created a format named “Hash Olimpiyatları (Hash Olympics)”. In this format, I announce an attack combination one week before the contest (see details at process and rules section). In one week, the participants are doing analyze and preparing the best lists for the given attack combination. They are not cracking hashes by themselves but they are sending required lists (wordlist, mask, rule) to me before the contest. I’m cracking the hashes in the target database live at Twitch with the lists that they sent.</summary></entry><entry><title type="html">Türkçe Wordlist Çalışmasında İkinci Faz</title><link href="https://utkusen.com/blog/turkce-wordlist-calismasinda-ikinci-faz.html" rel="alternate" type="text/html" title="Türkçe Wordlist Çalışmasında İkinci Faz" /><published>2020-12-20T10:39:08+03:00</published><updated>2020-12-20T10:39:08+03:00</updated><id>https://utkusen.com/blog/turkce-wordlist-calismasinda-ikinci-faz</id><content type="html" xml:base="https://utkusen.com/blog/turkce-wordlist-calismasinda-ikinci-faz.html">&lt;h2 id=&quot;giriş&quot;&gt;Giriş&lt;/h2&gt;

&lt;p&gt;Bildiğiniz gibi geçen sene, Rockyou wordlistindeki Türkçe kelime içeren parolaları bulmak için bir çalışma &lt;a href=&quot;https://utkusen.com/blog/rockyou-wordlistindeki-turkce-parolalarin-tespiti.html&quot;&gt;yapmıştım&lt;/a&gt;. Bu çalışmanın iki önemli eksiği vardı:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Veri seti kısıtlıydı&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Türk kullanıcıların içinde Türkçe kelime içermeyen parolalarını tespit edemiyordu&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bu iki problemin üstesinden gelmek için gönüllülerle birlikte &lt;a href=&quot;https://twitter.com/ahmetskulekci&quot;&gt;Ahmet Külekçi&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/redhchilihacker&quot;&gt;Rauf Giray Doğan&lt;/a&gt;, Murat Öztürk) çeşitli Hack forumlarında dolaşıp sızdırılmış veri tabanlarının dehashed (kırılmış) versiyonlarını indirdik. (Analiz edilen verilerin listesi &lt;a href=&quot;https://github.com/utkusen/turkce-wordlist&quot;&gt;repo&lt;/a&gt; açıklamasında mevcut)&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Yeni verilerle hem parola içinde, hem de e-posta adreslerinin içinde Türkçe kelime tespiti yapmam mümkün oldu. Örneğin şu iki satırı ele alalım:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;excalibur111@hotmail.com:karakartal1903

haznedarlibaba@gmail.com:ilovekpop
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Hem &lt;code class=&quot;highlighter-rouge&quot;&gt;karakartal1903&lt;/code&gt; hem de &lt;code class=&quot;highlighter-rouge&quot;&gt;ilovekpop&lt;/code&gt; parolalarını listeye alabildim.&lt;/p&gt;

&lt;p&gt;Tekrarlayanlar çıkartıldıktan sonra 218.176.522 adet satır analiz edilmek için hazırdı. Corpus’u da biraz temizledikten sonra elimde 14.398 Türkçe kelime kaldı. Toplamda 3.141.305.563.756 adet string karşılaştırması yapmam gerekiyordu. Bir önceki yazıda açıkladığım gibi bu karşılaştırma klasik iç içe for loop ile yapılamıyor, felaket uzun sürüyor (Go da başarısız oldu). &lt;a href=&quot;https://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_algorithm&quot;&gt;Aho-Corasick&lt;/a&gt; algoritması ile kısa sürede tamamlandı.&lt;/p&gt;

&lt;p&gt;Bunun yanında Türkiye kaynaklı sitelerden sızan da önemli miktarda veri vardı. Bunları temizledikten sonra doğrudan wordlistin içine aldım. Sonuç olarak elimizde 5.017.676 adet Türkçe (ya da Türk kullanıcıların kullandığı) parola kaldı.&lt;/p&gt;

&lt;p&gt;Türkçe wordliste buradan erişebilirsiniz: &lt;a href=&quot;https://github.com/utkusen/turkce-wordlist&quot;&gt;https://github.com/utkusen/turkce-wordlist&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Projeye siz de kendi analizleriniz ile katkıda bulunabilirsiniz. Detaylar için buraya bakabilirsiniz: &lt;a href=&quot;https://github.com/utkusen/turkce-wordlist/CONTRIBUTING.md&quot;&gt;https://github.com/utkusen/turkce-wordlist/CONTRIBUTING.md&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;sharebuttons&quot;&gt;
  &lt;hr /&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;p class=&quot;sharetitle&quot;&gt; Share this: &lt;/p&gt;
    &lt;/li&gt;
    &lt;li class=&quot;reddit&quot;&gt;
      &lt;a href=&quot;http://www.reddit.com/submit?url=https://utkusen.com/blog/turkce-wordlist-calismasinda-ikinci-faz.html&amp;amp;title=T%C3%BCrk%C3%A7e%20Wordlist%20%C3%87al%C4%B1%C5%9Fmas%C4%B1nda%20%C4%B0kinci%20Faz&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Reddit icon&lt;/title&gt;&lt;path d=&quot;M2.204 14.049c-.06.276-.091.56-.091.847 0 3.443 4.402 6.249 9.814 6.249 5.41 0 9.812-2.804 9.812-6.249 0-.274-.029-.546-.082-.809l-.015-.032c-.021-.055-.029-.11-.029-.165-.302-1.175-1.117-2.241-2.296-3.103-.045-.016-.088-.039-.126-.07-.026-.02-.045-.042-.067-.064-1.792-1.234-4.356-2.008-7.196-2.008-2.815 0-5.354.759-7.146 1.971-.014.018-.029.033-.049.049-.039.033-.084.06-.13.075-1.206.862-2.042 1.937-2.354 3.123 0 .058-.014.114-.037.171l-.008.015zm9.773 5.441c-1.794 0-3.057-.389-3.863-1.197-.173-.174-.173-.457 0-.632.176-.165.46-.165.635 0 .63.629 1.685.943 3.228.943 1.542 0 2.591-.3 3.219-.929.165-.164.45-.164.629 0 .165.18.165.465 0 .645-.809.808-2.065 1.198-3.862 1.198l.014-.028zm-3.606-7.573c-.914 0-1.677.765-1.677 1.677 0 .91.763 1.65 1.677 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm7.233 0c-.914 0-1.678.765-1.678 1.677 0 .91.764 1.65 1.678 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm4.548-1.595c1.037.833 1.8 1.821 2.189 2.904.45-.336.719-.864.719-1.449 0-1.002-.815-1.816-1.818-1.816-.399 0-.778.129-1.09.363v-.002zM2.711 9.963c-1.003 0-1.817.816-1.817 1.818 0 .543.239 1.048.644 1.389.401-1.079 1.172-2.053 2.213-2.876-.302-.21-.663-.329-1.039-.329v-.002zm9.217 12.079c-5.906 0-10.709-3.205-10.709-7.142 0-.275.023-.544.068-.809C.494 13.598 0 12.729 0 11.777c0-1.496 1.227-2.713 2.725-2.713.674 0 1.303.246 1.797.682 1.856-1.191 4.357-1.941 7.112-1.992l1.812-5.524.404.095s.016 0 .016.002l4.223.993c.344-.798 1.138-1.36 2.065-1.36 1.229 0 2.231 1.004 2.231 2.234 0 1.232-1.003 2.234-2.231 2.234s-2.23-1.004-2.23-2.23l-3.851-.912-1.467 4.477c2.65.105 5.047.854 6.844 2.021.494-.464 1.144-.719 1.833-.719 1.498 0 2.718 1.213 2.718 2.711 0 .987-.54 1.886-1.378 2.365.029.255.059.494.059.749-.015 3.938-4.806 7.143-10.72 7.143l-.034.009zm8.179-19.187c-.74 0-1.34.599-1.34 1.338 0 .738.6 1.34 1.34 1.34.732 0 1.33-.6 1.33-1.334 0-.733-.598-1.332-1.347-1.332l.017-.012z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;hn&quot;&gt;
      &lt;a href=&quot;http://news.ycombinator.com/submitlink?u=https://utkusen.com/blog/turkce-wordlist-calismasinda-ikinci-faz.html&amp;amp;t=T%C3%BCrk%C3%A7e%20Wordlist%20%C3%87al%C4%B1%C5%9Fmas%C4%B1nda%20%C4%B0kinci%20Faz&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Y Combinator icon&lt;/title&gt;&lt;path d=&quot;M0 24V0h24v24H0zM6.951 5.896l4.112 7.708v5.064h1.583v-4.972l4.148-7.799h-1.749l-2.457 4.875c-.372.745-.688 1.434-.688 1.434s-.297-.708-.651-1.434L8.831 5.896h-1.88z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;twitter&quot;&gt;
      &lt;a href=&quot;https://twitter.com/intent/tweet?via=utkusen&amp;amp;url=https://utkusen.com/blog/turkce-wordlist-calismasinda-ikinci-faz.html&amp;amp;text=T%C3%BCrk%C3%A7e%20Wordlist%20%C3%87al%C4%B1%C5%9Fmas%C4%B1nda%20%C4%B0kinci%20Faz&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Twitter icon&lt;/title&gt;&lt;path d=&quot;M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;linkedin&quot;&gt;
      &lt;a href=&quot;https://www.linkedin.com/shareArticle?mini=true&amp;amp;url=https://utkusen.com/blog/turkce-wordlist-calismasinda-ikinci-faz.html&amp;amp;title=T%C3%BCrk%C3%A7e%20Wordlist%20%C3%87al%C4%B1%C5%9Fmas%C4%B1nda%20%C4%B0kinci%20Faz&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;LinkedIn icon&lt;/title&gt;&lt;path d=&quot;M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;style&gt;
/* Share buttons */
.sharebuttons {
  margin: 0 auto 0 auto;
}

.sharebuttons ul {
  margin: 20px 0 0 0;
  text-align: center;
}

.sharebuttons ul li {
  display: inline;
}

.sharebuttons ul li a {
  text-decoration: none;
}

.sharebuttons ul li svg {
  width: 40px;
  height: 40px;
}

.sharebuttons .reddit svg {
  fill: #FF4500;
}

.sharebuttons .hn svg {
  fill: #F0652F;
}

.sharebuttons .twitter svg {
  fill: #1DA1F2;
}

.sharebuttons .linkedin svg {
  fill: #0077B5;
}
&lt;/style&gt;</content><author><name></name></author><category term="Security" /><summary type="html">Giriş Bildiğiniz gibi geçen sene, Rockyou wordlistindeki Türkçe kelime içeren parolaları bulmak için bir çalışma yapmıştım. Bu çalışmanın iki önemli eksiği vardı: Veri seti kısıtlıydı Türk kullanıcıların içinde Türkçe kelime içermeyen parolalarını tespit edemiyordu Bu iki problemin üstesinden gelmek için gönüllülerle birlikte Ahmet Külekçi, Rauf Giray Doğan, Murat Öztürk) çeşitli Hack forumlarında dolaşıp sızdırılmış veri tabanlarının dehashed (kırılmış) versiyonlarını indirdik. (Analiz edilen verilerin listesi repo açıklamasında mevcut)</summary></entry><entry><title type="html">Siber Güvenlik Sektöründeki Maaş Dağılımı Araştırması</title><link href="https://utkusen.com/blog/siber-guvenlik-sektorunde-maas-dagilimi.html" rel="alternate" type="text/html" title="Siber Güvenlik Sektöründeki Maaş Dağılımı Araştırması" /><published>2020-11-01T10:39:08+03:00</published><updated>2020-11-01T10:39:08+03:00</updated><id>https://utkusen.com/blog/siber-guvenlik-sektorunde-maas-dagilimi</id><content type="html" xml:base="https://utkusen.com/blog/siber-guvenlik-sektorunde-maas-dagilimi.html">&lt;h2 id=&quot;giriş&quot;&gt;Giriş&lt;/h2&gt;

&lt;p&gt;Son bir senedir siber güvenlik sektöründeki maaşlarla ilgili çok sayıda şikayet ve soru aldım. Genel olarak insanlar sektördeki maaş dağılımlarına hakim değil ve aldıkları ücretin iyi mi kötü mü olduğuna karar veremiyorlar. Ben de bu bilgiye çok hakim değildim. O yüzden herkesin konu hakkında bir fikir edinmesi için bir maaş anketi yaptım.&lt;/p&gt;

&lt;p&gt;Anketi paylaşırken spam girdilerden korkuyordum ancak neredeyse hiç spam olmadı. Birkaç trol girdinin dışında problem yaşanmadı. Girdi zamanlarına baktığımda arka arkaya çok sayıda bir giriş yapılmadığını da gördüm. Dolayısıyla anketteki veriler güvenilir gözüküyor. Yazım yanlışı olan ve outlier girdileri temizledikten sonra elimde 259 maaş bilgisi kaldı. Veri setini buradan indirebilirsiniz: &lt;a href=&quot;https://utkusen.com/blog/assets/maas.csv&quot;&gt;https://utkusen.com/blog/assets/maas.csv&lt;/a&gt;&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Ankette insanlar aşağıdaki rollerden birini seçerek maaş bilgilerini girdi:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ofansif Güvenlik Testçi (web, network… penetration testing, red teaming vs.)&lt;/li&gt;
  &lt;li&gt;Defansif Güvenlik Mühendisi (SOC/SIEM/EDR yönetimi, network güvenlik analizi, tersine mühendislik vs.)&lt;/li&gt;
  &lt;li&gt;Güvenlik Analisti(rapor analizleri, vulnerability management vs. )&lt;/li&gt;
  &lt;li&gt;Güvenlik Mimarı (web ya da network mimarisinin oluşturulması/analizi)&lt;/li&gt;
  &lt;li&gt;Yazılımcı (güvenlik ürünlerinin kodlanması)&lt;/li&gt;
  &lt;li&gt;Ürün Yöneticisi (Güvenlik ürünlerinin geliştirme/verim/bakım vs. süreçleri)&lt;/li&gt;
  &lt;li&gt;Bilgi Güvenliği Uzmanlığı (Policy yönetimi, uyumluluk, KVKK vs.)&lt;/li&gt;
  &lt;li&gt;Koordinatör (testlerin ya da süreçlerin yönetimi)&lt;/li&gt;
  &lt;li&gt;Satış/Destek (pre-sales engineer, ürün desteği vs.)&lt;/li&gt;
  &lt;li&gt;Takım Lideri (defansif/ofansif ekiplerin yönetimi vs.)&lt;/li&gt;
  &lt;li&gt;Yönetici (üst düzey sorumlu)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bu yazıda öncelikle tüm sektörün ortak grafiğini paylaşıp daha sonra bu roller özelinde grafikler paylaşacağım.&lt;/p&gt;

&lt;h2 id=&quot;grafik-açıklamaları&quot;&gt;Grafik Açıklamaları&lt;/h2&gt;

&lt;p&gt;Grafiklerin X ekseninde yıl cinsinden tecrübe, Y ekseninde TL cinsinden maaş değerleri yer almaktadır. &lt;strong&gt;Yuvarlak&lt;/strong&gt; elemanlar her bir girdiyi ifade ederken &lt;strong&gt;kare&lt;/strong&gt; olanlar o tecrübe sütunundaki maaş ortalamasını(median) göstermektedir.&lt;/p&gt;

&lt;h3 id=&quot;tüm-sektör&quot;&gt;Tüm Sektör&lt;/h3&gt;

&lt;p&gt;Tüm maaş dağılımları&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/blog/assets/genel.png&quot;&gt;&lt;img src=&quot;/blog/assets/genel.png&quot; alt=&quot;Genel&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tecrübeye göre ortalama(median) maaşlar&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/blog/assets/genel2.png&quot;&gt;&lt;img src=&quot;/blog/assets/genel2.png&quot; alt=&quot;Genel&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;ofansif-güvenlik&quot;&gt;Ofansif Güvenlik&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/blog/assets/ofansif.png&quot;&gt;&lt;img src=&quot;/blog/assets/ofansif.png&quot; alt=&quot;Ofansif&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;defansif-güvenlik&quot;&gt;Defansif Güvenlik&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/blog/assets/defansif.png&quot;&gt;&lt;img src=&quot;/blog/assets/defansif.png&quot; alt=&quot;Ofansif&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;güvenlik-analisti&quot;&gt;Güvenlik Analisti&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/blog/assets/analist.png&quot;&gt;&lt;img src=&quot;/blog/assets/analist.png&quot; alt=&quot;Ofansif&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;güvenlik-mimarı&quot;&gt;Güvenlik Mimarı&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/blog/assets/mimar.png&quot;&gt;&lt;img src=&quot;/blog/assets/mimar.png&quot; alt=&quot;Ofansif&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;yazılımcı&quot;&gt;Yazılımcı&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/blog/assets/yazilimci.png&quot;&gt;&lt;img src=&quot;/blog/assets/yazilimci.png&quot; alt=&quot;Ofansif&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;ürün-yöneticisi&quot;&gt;Ürün Yöneticisi&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/blog/assets/productmanager.png&quot;&gt;&lt;img src=&quot;/blog/assets/productmanager.png&quot; alt=&quot;Ofansif&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;bilgi-güvenliği&quot;&gt;Bilgi Güvenliği&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/blog/assets/bilgiguvenligi.png&quot;&gt;&lt;img src=&quot;/blog/assets/bilgiguvenligi.png&quot; alt=&quot;Ofansif&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;koordinatör&quot;&gt;Koordinatör&lt;/h3&gt;

&lt;p&gt;Yeterli girdi bulunmamaktadır.&lt;/p&gt;

&lt;h3 id=&quot;satışdestek&quot;&gt;Satış/Destek&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/blog/assets/satis.png&quot;&gt;&lt;img src=&quot;/blog/assets/satis.png&quot; alt=&quot;Ofansif&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;takım-lideri&quot;&gt;Takım Lideri&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/blog/assets/takim-lideri.png&quot;&gt;&lt;img src=&quot;/blog/assets/takim-lideri.png&quot; alt=&quot;Ofansif&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;yönetici&quot;&gt;Yönetici&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/blog/assets/yonetici.png&quot;&gt;&lt;img src=&quot;/blog/assets/yonetici.png&quot; alt=&quot;Ofansif&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;sharebuttons&quot;&gt;
  &lt;hr /&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;p class=&quot;sharetitle&quot;&gt; Share this: &lt;/p&gt;
    &lt;/li&gt;
    &lt;li class=&quot;reddit&quot;&gt;
      &lt;a href=&quot;http://www.reddit.com/submit?url=https://utkusen.com/blog/siber-guvenlik-sektorunde-maas-dagilimi.html&amp;amp;title=Siber%20G%C3%BCvenlik%20Sekt%C3%B6r%C3%BCndeki%20Maa%C5%9F%20Da%C4%9F%C4%B1l%C4%B1m%C4%B1%20Ara%C5%9Ft%C4%B1rmas%C4%B1&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Reddit icon&lt;/title&gt;&lt;path d=&quot;M2.204 14.049c-.06.276-.091.56-.091.847 0 3.443 4.402 6.249 9.814 6.249 5.41 0 9.812-2.804 9.812-6.249 0-.274-.029-.546-.082-.809l-.015-.032c-.021-.055-.029-.11-.029-.165-.302-1.175-1.117-2.241-2.296-3.103-.045-.016-.088-.039-.126-.07-.026-.02-.045-.042-.067-.064-1.792-1.234-4.356-2.008-7.196-2.008-2.815 0-5.354.759-7.146 1.971-.014.018-.029.033-.049.049-.039.033-.084.06-.13.075-1.206.862-2.042 1.937-2.354 3.123 0 .058-.014.114-.037.171l-.008.015zm9.773 5.441c-1.794 0-3.057-.389-3.863-1.197-.173-.174-.173-.457 0-.632.176-.165.46-.165.635 0 .63.629 1.685.943 3.228.943 1.542 0 2.591-.3 3.219-.929.165-.164.45-.164.629 0 .165.18.165.465 0 .645-.809.808-2.065 1.198-3.862 1.198l.014-.028zm-3.606-7.573c-.914 0-1.677.765-1.677 1.677 0 .91.763 1.65 1.677 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm7.233 0c-.914 0-1.678.765-1.678 1.677 0 .91.764 1.65 1.678 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm4.548-1.595c1.037.833 1.8 1.821 2.189 2.904.45-.336.719-.864.719-1.449 0-1.002-.815-1.816-1.818-1.816-.399 0-.778.129-1.09.363v-.002zM2.711 9.963c-1.003 0-1.817.816-1.817 1.818 0 .543.239 1.048.644 1.389.401-1.079 1.172-2.053 2.213-2.876-.302-.21-.663-.329-1.039-.329v-.002zm9.217 12.079c-5.906 0-10.709-3.205-10.709-7.142 0-.275.023-.544.068-.809C.494 13.598 0 12.729 0 11.777c0-1.496 1.227-2.713 2.725-2.713.674 0 1.303.246 1.797.682 1.856-1.191 4.357-1.941 7.112-1.992l1.812-5.524.404.095s.016 0 .016.002l4.223.993c.344-.798 1.138-1.36 2.065-1.36 1.229 0 2.231 1.004 2.231 2.234 0 1.232-1.003 2.234-2.231 2.234s-2.23-1.004-2.23-2.23l-3.851-.912-1.467 4.477c2.65.105 5.047.854 6.844 2.021.494-.464 1.144-.719 1.833-.719 1.498 0 2.718 1.213 2.718 2.711 0 .987-.54 1.886-1.378 2.365.029.255.059.494.059.749-.015 3.938-4.806 7.143-10.72 7.143l-.034.009zm8.179-19.187c-.74 0-1.34.599-1.34 1.338 0 .738.6 1.34 1.34 1.34.732 0 1.33-.6 1.33-1.334 0-.733-.598-1.332-1.347-1.332l.017-.012z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;hn&quot;&gt;
      &lt;a href=&quot;http://news.ycombinator.com/submitlink?u=https://utkusen.com/blog/siber-guvenlik-sektorunde-maas-dagilimi.html&amp;amp;t=Siber%20G%C3%BCvenlik%20Sekt%C3%B6r%C3%BCndeki%20Maa%C5%9F%20Da%C4%9F%C4%B1l%C4%B1m%C4%B1%20Ara%C5%9Ft%C4%B1rmas%C4%B1&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Y Combinator icon&lt;/title&gt;&lt;path d=&quot;M0 24V0h24v24H0zM6.951 5.896l4.112 7.708v5.064h1.583v-4.972l4.148-7.799h-1.749l-2.457 4.875c-.372.745-.688 1.434-.688 1.434s-.297-.708-.651-1.434L8.831 5.896h-1.88z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;twitter&quot;&gt;
      &lt;a href=&quot;https://twitter.com/intent/tweet?via=utkusen&amp;amp;url=https://utkusen.com/blog/siber-guvenlik-sektorunde-maas-dagilimi.html&amp;amp;text=Siber%20G%C3%BCvenlik%20Sekt%C3%B6r%C3%BCndeki%20Maa%C5%9F%20Da%C4%9F%C4%B1l%C4%B1m%C4%B1%20Ara%C5%9Ft%C4%B1rmas%C4%B1&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Twitter icon&lt;/title&gt;&lt;path d=&quot;M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;linkedin&quot;&gt;
      &lt;a href=&quot;https://www.linkedin.com/shareArticle?mini=true&amp;amp;url=https://utkusen.com/blog/siber-guvenlik-sektorunde-maas-dagilimi.html&amp;amp;title=Siber%20G%C3%BCvenlik%20Sekt%C3%B6r%C3%BCndeki%20Maa%C5%9F%20Da%C4%9F%C4%B1l%C4%B1m%C4%B1%20Ara%C5%9Ft%C4%B1rmas%C4%B1&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;LinkedIn icon&lt;/title&gt;&lt;path d=&quot;M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;style&gt;
/* Share buttons */
.sharebuttons {
  margin: 0 auto 0 auto;
}

.sharebuttons ul {
  margin: 20px 0 0 0;
  text-align: center;
}

.sharebuttons ul li {
  display: inline;
}

.sharebuttons ul li a {
  text-decoration: none;
}

.sharebuttons ul li svg {
  width: 40px;
  height: 40px;
}

.sharebuttons .reddit svg {
  fill: #FF4500;
}

.sharebuttons .hn svg {
  fill: #F0652F;
}

.sharebuttons .twitter svg {
  fill: #1DA1F2;
}

.sharebuttons .linkedin svg {
  fill: #0077B5;
}
&lt;/style&gt;</content><author><name></name></author><category term="Security" /><summary type="html">Giriş Son bir senedir siber güvenlik sektöründeki maaşlarla ilgili çok sayıda şikayet ve soru aldım. Genel olarak insanlar sektördeki maaş dağılımlarına hakim değil ve aldıkları ücretin iyi mi kötü mü olduğuna karar veremiyorlar. Ben de bu bilgiye çok hakim değildim. O yüzden herkesin konu hakkında bir fikir edinmesi için bir maaş anketi yaptım. Anketi paylaşırken spam girdilerden korkuyordum ancak neredeyse hiç spam olmadı. Birkaç trol girdinin dışında problem yaşanmadı. Girdi zamanlarına baktığımda arka arkaya çok sayıda bir giriş yapılmadığını da gördüm. Dolayısıyla anketteki veriler güvenilir gözüküyor. Yazım yanlışı olan ve outlier girdileri temizledikten sonra elimde 259 maaş bilgisi kaldı. Veri setini buradan indirebilirsiniz: https://utkusen.com/blog/assets/maas.csv</summary></entry><entry><title type="html">Security by Obscurity is Underrated</title><link href="https://utkusen.com/blog/security-by-obscurity-is-underrated.html" rel="alternate" type="text/html" title="Security by Obscurity is Underrated" /><published>2020-09-08T10:39:08+03:00</published><updated>2020-09-08T10:39:08+03:00</updated><id>https://utkusen.com/blog/security-by-obscurity-is-underrated</id><content type="html" xml:base="https://utkusen.com/blog/security-by-obscurity-is-underrated.html">&lt;p&gt;🔥 This article widely discussed at &lt;a href=&quot;https://news.ycombinator.com/item?id=24444497&quot;&gt;Hackernews&lt;/a&gt; and &lt;a href=&quot;https://www.reddit.com/r/netsec/comments/ioxux2/security_by_obscurity_is_underrated/&quot;&gt;Reddit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the information security field, we have developed lots of thoughts that can’t be discussed (or rarely discussed):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Never roll your own crypto&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Always use TLS&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Security by obscurity is bad&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And goes like this. Most of them are very generally correct. However, I started to think that people are telling those because everyone is telling them. And, most of the people are actually not thinking about exceptional cases. In this post, I will raise my objection against the idea of “Security by obscurity is bad”.&lt;/p&gt;

&lt;h2 id=&quot;risk-defense-in-depth-and-swiss-cheese&quot;&gt;Risk, Defense in Depth and Swiss Cheese&lt;/h2&gt;

&lt;p&gt;One of the main goal of defensive security is reducing the risk for the target business. According to the OWASP’s methodology, the risk of an issue is calculated with the formula below:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Risk = Likelihood * Impact&lt;/code&gt;&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;According to this formula, a Remote Code Execution issue poses more risk than a Cross Site Scripting one since the RCE causes more impact. This is easy. But what about the likelihood metric. According to the OWASP, likelihood refers that:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;At the highest level, this is a rough measure of how likely this particular vulnerability is to be uncovered and exploited by an attacker
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So, if we can reduce the likelihood, we can reduce the overall risk. That’s good. It’s actually very similar to a very common idea called “Defense in Depth”. It’s also referred as “Swiss Cheese Model”&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/0/07/Swiss_cheese_model.svg&quot; alt=&quot;Swiss Cheese&quot; /&gt;&lt;/p&gt;

&lt;p&gt;According to this model, you need to build your defense mechanisms in a layered model so that even the attackers pass the first one, they will get caught on the others.&lt;/p&gt;

&lt;h2 id=&quot;security-by-obscurity&quot;&gt;Security by Obscurity&lt;/h2&gt;

&lt;p&gt;So let’s talk about security by obscurity. It’s a bad idea to use it as a single layer of defense. If the attacker passes it, there is nothing else to protect you. But it’s actually would be good to use it as an “additional” layer of defense. Because it has a low implementation cost and it usually works well.&lt;/p&gt;

&lt;p&gt;Let’s think about a couple of scenarios here:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;I have a server that runs the SSH with it’s default port &lt;code class=&quot;highlighter-rouge&quot;&gt;22&lt;/code&gt; and my credentials are: &lt;code class=&quot;highlighter-rouge&quot;&gt;root:123456&lt;/code&gt;. What is the likelihood of being compromised?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s almost 100% since the hackers are conducting brute force attacks to the services with common credentials globally.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;SSH runs in port &lt;code class=&quot;highlighter-rouge&quot;&gt;22&lt;/code&gt; and my credentials are &lt;code class=&quot;highlighter-rouge&quot;&gt;utku:123456&lt;/code&gt;. What is the likelihood of being compromised?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Well, we have eliminated the global brute forcers since we are not using a common username. The likelihood and risk are reduced. However, we still have to deal with targeted attackers. A targeted attacker can guess the username as &lt;code class=&quot;highlighter-rouge&quot;&gt;utku&lt;/code&gt; since it’s my name.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;SSH runs in port &lt;code class=&quot;highlighter-rouge&quot;&gt;64323&lt;/code&gt; and my credentials are &lt;code class=&quot;highlighter-rouge&quot;&gt;utku:123456&lt;/code&gt;. What is the likelihood of being compromised?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now we changed the default port number. Does it help? Firstly, we’ve eliminated the global brute forcers again since they scan only the common ports. What about the others? To find this out, I did a small survey on my Twitter to find out people’s port scan behaviors.&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;I&amp;#39;m trying to prove a point for my new article. I need your answers for the question below. (please be honest)&lt;br /&gt;&lt;br /&gt;-When you do a port scan with nmap to find open ports on the target, are you specify a custom port range to scan all 65,535 ports? (with -p0-65535 parameter)&lt;/p&gt;&amp;mdash; Utku Şen (@utkusen) &lt;a href=&quot;https://twitter.com/utkusen/status/1303021175556145154?ref_src=twsrc%5Etfw&quot;&gt;September 7, 2020&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;As you can see here, lots of people tend to scan the default/most popular ports only. So, if you switch your port from 22 to 64323, you will eliminate some of them. You will reduce the likelihood and risk.&lt;/p&gt;

&lt;p&gt;The same thing goes for software vulnerabilities as well. If a vulnerability found in the Microsoft Remote Desktop Protocol, everybody will scan for the port 3389 globally. You can reduce your risk just by changing the default port.&lt;/p&gt;

&lt;h2 id=&quot;other-applications&quot;&gt;Other Applications&lt;/h2&gt;

&lt;p&gt;Of course, it’s possible to use the same methodology in other fields other than changing the defaults. For example, the following ideas might be a good idea for some specific cases (not always)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Obfuscating codes:&lt;/strong&gt; Of course, it’s common knowledge. Hackers are people too. If you obfuscate your code well, they will need to spend more time to find issues. They may give up eventually.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Using random variable names for a web application:&lt;/strong&gt; Instead of using clear variable names, you can switch them with random strings. It might help just like the code obfuscation.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Using Symmetric Encryption in the Database:&lt;/strong&gt; When you write data to the database, use a function like &lt;code class=&quot;highlighter-rouge&quot;&gt;encryption_algorithm(data,key)&lt;/code&gt;. Likewise, when you read data, use a function like &lt;code class=&quot;highlighter-rouge&quot;&gt;decryption_algorithm(data,key)&lt;/code&gt;. If the attacker can read your backend code, obviously he/she can decrypt your database. But if there is an issue that allows an attacker to read data from the database, but not the backend code (like SQL Injection), the gathered data won’t be helpful for the attacker.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;real-life-applications&quot;&gt;Real Life Applications&lt;/h2&gt;

&lt;p&gt;Security by obscurity is widely used in physical/real-life security. For example, the president goes from point A to point B with his 30 cars convoy. But he’s not sitting on his own presidential car so that the attacker won’t target him easily. He can be in any car and it reduces the risk of an attack.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://i.dailymail.co.uk/1s/2019/06/04/00/14330600-0-image-a-38_1559605545988.jpg&quot; alt=&quot;President&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Camouflaged animals are using security by obscurity as well. Obscurity reduces the likelihood of being killed. Therefore, they gained this ability in the evolutionary process.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://static.boredpanda.com/blog/wp-content/uuuploads/animal-camouflage/animal-camouflage-4.jpg&quot; alt=&quot;Animal&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Security by obscurity is not enough by itself. You should always enforce the best practices. However, if you can reduce the risk with zero cost, you should do that. Obscurity is a good layer of security.&lt;/p&gt;

&lt;div class=&quot;sharebuttons&quot;&gt;
  &lt;hr /&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;p class=&quot;sharetitle&quot;&gt; Share this: &lt;/p&gt;
    &lt;/li&gt;
    &lt;li class=&quot;reddit&quot;&gt;
      &lt;a href=&quot;http://www.reddit.com/submit?url=https://utkusen.com/blog/security-by-obscurity-is-underrated.html&amp;amp;title=Security%20by%20Obscurity%20is%20Underrated&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Reddit icon&lt;/title&gt;&lt;path d=&quot;M2.204 14.049c-.06.276-.091.56-.091.847 0 3.443 4.402 6.249 9.814 6.249 5.41 0 9.812-2.804 9.812-6.249 0-.274-.029-.546-.082-.809l-.015-.032c-.021-.055-.029-.11-.029-.165-.302-1.175-1.117-2.241-2.296-3.103-.045-.016-.088-.039-.126-.07-.026-.02-.045-.042-.067-.064-1.792-1.234-4.356-2.008-7.196-2.008-2.815 0-5.354.759-7.146 1.971-.014.018-.029.033-.049.049-.039.033-.084.06-.13.075-1.206.862-2.042 1.937-2.354 3.123 0 .058-.014.114-.037.171l-.008.015zm9.773 5.441c-1.794 0-3.057-.389-3.863-1.197-.173-.174-.173-.457 0-.632.176-.165.46-.165.635 0 .63.629 1.685.943 3.228.943 1.542 0 2.591-.3 3.219-.929.165-.164.45-.164.629 0 .165.18.165.465 0 .645-.809.808-2.065 1.198-3.862 1.198l.014-.028zm-3.606-7.573c-.914 0-1.677.765-1.677 1.677 0 .91.763 1.65 1.677 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm7.233 0c-.914 0-1.678.765-1.678 1.677 0 .91.764 1.65 1.678 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm4.548-1.595c1.037.833 1.8 1.821 2.189 2.904.45-.336.719-.864.719-1.449 0-1.002-.815-1.816-1.818-1.816-.399 0-.778.129-1.09.363v-.002zM2.711 9.963c-1.003 0-1.817.816-1.817 1.818 0 .543.239 1.048.644 1.389.401-1.079 1.172-2.053 2.213-2.876-.302-.21-.663-.329-1.039-.329v-.002zm9.217 12.079c-5.906 0-10.709-3.205-10.709-7.142 0-.275.023-.544.068-.809C.494 13.598 0 12.729 0 11.777c0-1.496 1.227-2.713 2.725-2.713.674 0 1.303.246 1.797.682 1.856-1.191 4.357-1.941 7.112-1.992l1.812-5.524.404.095s.016 0 .016.002l4.223.993c.344-.798 1.138-1.36 2.065-1.36 1.229 0 2.231 1.004 2.231 2.234 0 1.232-1.003 2.234-2.231 2.234s-2.23-1.004-2.23-2.23l-3.851-.912-1.467 4.477c2.65.105 5.047.854 6.844 2.021.494-.464 1.144-.719 1.833-.719 1.498 0 2.718 1.213 2.718 2.711 0 .987-.54 1.886-1.378 2.365.029.255.059.494.059.749-.015 3.938-4.806 7.143-10.72 7.143l-.034.009zm8.179-19.187c-.74 0-1.34.599-1.34 1.338 0 .738.6 1.34 1.34 1.34.732 0 1.33-.6 1.33-1.334 0-.733-.598-1.332-1.347-1.332l.017-.012z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;hn&quot;&gt;
      &lt;a href=&quot;http://news.ycombinator.com/submitlink?u=https://utkusen.com/blog/security-by-obscurity-is-underrated.html&amp;amp;t=Security%20by%20Obscurity%20is%20Underrated&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Y Combinator icon&lt;/title&gt;&lt;path d=&quot;M0 24V0h24v24H0zM6.951 5.896l4.112 7.708v5.064h1.583v-4.972l4.148-7.799h-1.749l-2.457 4.875c-.372.745-.688 1.434-.688 1.434s-.297-.708-.651-1.434L8.831 5.896h-1.88z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;twitter&quot;&gt;
      &lt;a href=&quot;https://twitter.com/intent/tweet?via=utkusen&amp;amp;url=https://utkusen.com/blog/security-by-obscurity-is-underrated.html&amp;amp;text=Security%20by%20Obscurity%20is%20Underrated&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Twitter icon&lt;/title&gt;&lt;path d=&quot;M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;linkedin&quot;&gt;
      &lt;a href=&quot;https://www.linkedin.com/shareArticle?mini=true&amp;amp;url=https://utkusen.com/blog/security-by-obscurity-is-underrated.html&amp;amp;title=Security%20by%20Obscurity%20is%20Underrated&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;LinkedIn icon&lt;/title&gt;&lt;path d=&quot;M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;style&gt;
/* Share buttons */
.sharebuttons {
  margin: 0 auto 0 auto;
}

.sharebuttons ul {
  margin: 20px 0 0 0;
  text-align: center;
}

.sharebuttons ul li {
  display: inline;
}

.sharebuttons ul li a {
  text-decoration: none;
}

.sharebuttons ul li svg {
  width: 40px;
  height: 40px;
}

.sharebuttons .reddit svg {
  fill: #FF4500;
}

.sharebuttons .hn svg {
  fill: #F0652F;
}

.sharebuttons .twitter svg {
  fill: #1DA1F2;
}

.sharebuttons .linkedin svg {
  fill: #0077B5;
}
&lt;/style&gt;</content><author><name></name></author><category term="Security" /><summary type="html">🔥 This article widely discussed at Hackernews and Reddit In the information security field, we have developed lots of thoughts that can’t be discussed (or rarely discussed): Never roll your own crypto Always use TLS Security by obscurity is bad And goes like this. Most of them are very generally correct. However, I started to think that people are telling those because everyone is telling them. And, most of the people are actually not thinking about exceptional cases. In this post, I will raise my objection against the idea of “Security by obscurity is bad”. Risk, Defense in Depth and Swiss Cheese One of the main goal of defensive security is reducing the risk for the target business. According to the OWASP’s methodology, the risk of an issue is calculated with the formula below: Risk = Likelihood * Impact</summary></entry><entry><title type="html">Torture-Proof Authentication</title><link href="https://utkusen.com/blog/torture-proof-authentication.html" rel="alternate" type="text/html" title="Torture-Proof Authentication" /><published>2020-02-26T10:39:08+03:00</published><updated>2020-02-26T10:39:08+03:00</updated><id>https://utkusen.com/blog/torture-proof-authentication</id><content type="html" xml:base="https://utkusen.com/blog/torture-proof-authentication.html">&lt;p&gt;Authentication is one of the biggest problems of security since the beginning of the internet. In most cases, we are using passwords for authentication. But it usually causes problems since people are using weak passwords, reusing the same passwords on different platforms or simply giving them away with phishing scams. Not only for websites/applications, we were also using them to unlock our mobile phones. However, companies like Apple provided more user-friendly authentication options such as Touch ID and Face ID where you can unlock your phone with your biometric data.&lt;/p&gt;

&lt;p&gt;Authentication with biometric data is cool, but I’m not really a big fan of that. It’s easy to put someone’s finger on their iPhone by force. It’s a great risk for people who are living under oppressive regimes or criminals who want to negotiate after being captured.&lt;/p&gt;

&lt;p&gt;What about regular passcodes. It’s something that’s only available in your mind. But this doesn’t mean that you are not at risk. They can torture you to get that passcode, and eventually, you will give up.&lt;/p&gt;

&lt;p&gt;What do we need then? We need an authentication mechanism that can’t be captured even by the torture. Assuming that we will compromise under torture, this mechanism should aware that we are under stress.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;an-experiment-authentication-via-body-motions&quot;&gt;An Experiment: Authentication via Body Motions&lt;/h2&gt;

&lt;p&gt;My base hypothesis was everyone has a unique wrist motion. I was thinking that we can create a machine learning model around that, differentiate and authenticate people by analyzing their wrist motion data coming from smartwatches. How would it help with the torture case? Since you will be under huge stress after torture, your wrist movements will be different even if you push yourself to act like as normal. Hence, you won’t be able to authenticate.&lt;/p&gt;

&lt;p&gt;To test this, I created an Apple Watch application which records my wrist movements when I’m walking from the kitchen to my computer. I recorded 100 walking events and trained it. My expectation was: When I walk again to my computer, it should correlate the data with the model and authenticate me. Besides that, when another person walks in, it should detect the anomaly and won’t authorize. This experiment is failed for two reasons:&lt;/p&gt;

&lt;p&gt;1) To get a proper model, 100 records isn’t enough, you may need to record it 500 times. This kills the usability.&lt;/p&gt;

&lt;p&gt;2)I turned out it’s not so hard to mimic someone else’s movement. This kills the security and the entire concept&lt;/p&gt;

&lt;h2 id=&quot;a-futuristic-approach&quot;&gt;A Futuristic Approach&lt;/h2&gt;

&lt;p&gt;We need a microcomputer that goes under the skin and stays there for a long time. This little computer will have our password (or private key etc.) for authentication and needs to be physically destroyed when it goes out of the skin. The password will be transferred to the device that you want to authenticate via a wireless medium such as NFC or Bluetooth (or some future model)&lt;/p&gt;

&lt;p&gt;This computer will also measure the heartbeat and cortisol levels of the user. If the measurement goes beyond the defined threshold, authentication won’t occur until the user gets calm. There won’t be any backdoor to bypass this control. This will be a common knowledge and your kidnappers won’t torture you since they would know there is no chance to trigger the authentication mechanism by force.&lt;/p&gt;

&lt;h2 id=&quot;more-realistic-approaches&quot;&gt;More Realistic Approaches&lt;/h2&gt;

&lt;p&gt;We don’t know when we will have microcomputers with a heart rate detector. But there are things that can be done with today’s technology (or in the near future)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Touch ID with heart rate measurement&lt;/strong&gt;: Apple Watches and various devices can measure the heart rate from outside of the skin. So when a user tries to authenticate with fingerprint, the device should control his/her heart rate, and won’t allow if it’s above the defined threshold.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Face ID with a crazy machine learning model&lt;/strong&gt;: Imagine a machine learning model that can differentiate your normal face from a stressed one. This can be possible in the near future. So when you try to unlock your phone with a stressed face, the device won’t allow you to do it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Panic button&lt;/strong&gt;: When the user thing zhe’s going to be arrested (or kidnapped), zhe will press a button which will lock all kind of authorization attempts on all devices. This can’t be unlocked by the user zhimself. The user should define three trusted people that can trigger the unlock event. The devices won’t unlock if all these three people agree on that.&lt;/p&gt;

&lt;div class=&quot;sharebuttons&quot;&gt;
  &lt;hr /&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;p class=&quot;sharetitle&quot;&gt; Share this: &lt;/p&gt;
    &lt;/li&gt;
    &lt;li class=&quot;reddit&quot;&gt;
      &lt;a href=&quot;http://www.reddit.com/submit?url=https://utkusen.com/blog/torture-proof-authentication.html&amp;amp;title=Torture-Proof%20Authentication&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Reddit icon&lt;/title&gt;&lt;path d=&quot;M2.204 14.049c-.06.276-.091.56-.091.847 0 3.443 4.402 6.249 9.814 6.249 5.41 0 9.812-2.804 9.812-6.249 0-.274-.029-.546-.082-.809l-.015-.032c-.021-.055-.029-.11-.029-.165-.302-1.175-1.117-2.241-2.296-3.103-.045-.016-.088-.039-.126-.07-.026-.02-.045-.042-.067-.064-1.792-1.234-4.356-2.008-7.196-2.008-2.815 0-5.354.759-7.146 1.971-.014.018-.029.033-.049.049-.039.033-.084.06-.13.075-1.206.862-2.042 1.937-2.354 3.123 0 .058-.014.114-.037.171l-.008.015zm9.773 5.441c-1.794 0-3.057-.389-3.863-1.197-.173-.174-.173-.457 0-.632.176-.165.46-.165.635 0 .63.629 1.685.943 3.228.943 1.542 0 2.591-.3 3.219-.929.165-.164.45-.164.629 0 .165.18.165.465 0 .645-.809.808-2.065 1.198-3.862 1.198l.014-.028zm-3.606-7.573c-.914 0-1.677.765-1.677 1.677 0 .91.763 1.65 1.677 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm7.233 0c-.914 0-1.678.765-1.678 1.677 0 .91.764 1.65 1.678 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm4.548-1.595c1.037.833 1.8 1.821 2.189 2.904.45-.336.719-.864.719-1.449 0-1.002-.815-1.816-1.818-1.816-.399 0-.778.129-1.09.363v-.002zM2.711 9.963c-1.003 0-1.817.816-1.817 1.818 0 .543.239 1.048.644 1.389.401-1.079 1.172-2.053 2.213-2.876-.302-.21-.663-.329-1.039-.329v-.002zm9.217 12.079c-5.906 0-10.709-3.205-10.709-7.142 0-.275.023-.544.068-.809C.494 13.598 0 12.729 0 11.777c0-1.496 1.227-2.713 2.725-2.713.674 0 1.303.246 1.797.682 1.856-1.191 4.357-1.941 7.112-1.992l1.812-5.524.404.095s.016 0 .016.002l4.223.993c.344-.798 1.138-1.36 2.065-1.36 1.229 0 2.231 1.004 2.231 2.234 0 1.232-1.003 2.234-2.231 2.234s-2.23-1.004-2.23-2.23l-3.851-.912-1.467 4.477c2.65.105 5.047.854 6.844 2.021.494-.464 1.144-.719 1.833-.719 1.498 0 2.718 1.213 2.718 2.711 0 .987-.54 1.886-1.378 2.365.029.255.059.494.059.749-.015 3.938-4.806 7.143-10.72 7.143l-.034.009zm8.179-19.187c-.74 0-1.34.599-1.34 1.338 0 .738.6 1.34 1.34 1.34.732 0 1.33-.6 1.33-1.334 0-.733-.598-1.332-1.347-1.332l.017-.012z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;hn&quot;&gt;
      &lt;a href=&quot;http://news.ycombinator.com/submitlink?u=https://utkusen.com/blog/torture-proof-authentication.html&amp;amp;t=Torture-Proof%20Authentication&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Y Combinator icon&lt;/title&gt;&lt;path d=&quot;M0 24V0h24v24H0zM6.951 5.896l4.112 7.708v5.064h1.583v-4.972l4.148-7.799h-1.749l-2.457 4.875c-.372.745-.688 1.434-.688 1.434s-.297-.708-.651-1.434L8.831 5.896h-1.88z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;twitter&quot;&gt;
      &lt;a href=&quot;https://twitter.com/intent/tweet?via=utkusen&amp;amp;url=https://utkusen.com/blog/torture-proof-authentication.html&amp;amp;text=Torture-Proof%20Authentication&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Twitter icon&lt;/title&gt;&lt;path d=&quot;M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;linkedin&quot;&gt;
      &lt;a href=&quot;https://www.linkedin.com/shareArticle?mini=true&amp;amp;url=https://utkusen.com/blog/torture-proof-authentication.html&amp;amp;title=Torture-Proof%20Authentication&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;LinkedIn icon&lt;/title&gt;&lt;path d=&quot;M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;style&gt;
/* Share buttons */
.sharebuttons {
  margin: 0 auto 0 auto;
}

.sharebuttons ul {
  margin: 20px 0 0 0;
  text-align: center;
}

.sharebuttons ul li {
  display: inline;
}

.sharebuttons ul li a {
  text-decoration: none;
}

.sharebuttons ul li svg {
  width: 40px;
  height: 40px;
}

.sharebuttons .reddit svg {
  fill: #FF4500;
}

.sharebuttons .hn svg {
  fill: #F0652F;
}

.sharebuttons .twitter svg {
  fill: #1DA1F2;
}

.sharebuttons .linkedin svg {
  fill: #0077B5;
}
&lt;/style&gt;</content><author><name></name></author><category term="Authentication" /><summary type="html">Authentication is one of the biggest problems of security since the beginning of the internet. In most cases, we are using passwords for authentication. But it usually causes problems since people are using weak passwords, reusing the same passwords on different platforms or simply giving them away with phishing scams. Not only for websites/applications, we were also using them to unlock our mobile phones. However, companies like Apple provided more user-friendly authentication options such as Touch ID and Face ID where you can unlock your phone with your biometric data. Authentication with biometric data is cool, but I’m not really a big fan of that. It’s easy to put someone’s finger on their iPhone by force. It’s a great risk for people who are living under oppressive regimes or criminals who want to negotiate after being captured. What about regular passcodes. It’s something that’s only available in your mind. But this doesn’t mean that you are not at risk. They can torture you to get that passcode, and eventually, you will give up. What do we need then? We need an authentication mechanism that can’t be captured even by the torture. Assuming that we will compromise under torture, this mechanism should aware that we are under stress.</summary></entry><entry><title type="html">An Introduction to Arcade Security</title><link href="https://utkusen.com/blog/an-introduction-to-arcade-security.html" rel="alternate" type="text/html" title="An Introduction to Arcade Security" /><published>2019-12-25T10:39:08+03:00</published><updated>2019-12-25T10:39:08+03:00</updated><id>https://utkusen.com/blog/an-introduction-to-arcade-security</id><content type="html" xml:base="https://utkusen.com/blog/an-introduction-to-arcade-security.html">&lt;p&gt;&lt;strong&gt;&lt;em&gt;TL;DR&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;This article contains my experiences on testing amusement arcade’s security.
I found a DoS vulnerability on Intercard devices. An attacker can take down entire
arcade machines by using this vulnerability.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Me and my girlfriend love to spend hours in local arcades. I always wanted to know
how their network works and are they secure or not. But I couldn’t find a comprehensive article
about it. I decided to test them by myself.&lt;/p&gt;

&lt;h2 id=&quot;learning-the-fundamentals&quot;&gt;Learning The Fundamentals&lt;/h2&gt;

&lt;p&gt;In most of the arcades, you need to have their magnetic stripe card. You need
to go to the cashier and say how much credit you want. After that, she gets a random card from the stack,
swipes it at a machine, presses some buttons on the screen and gives the card.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;To play a video game, you need to swipe your card at a machine looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/blog/assets/arcade1.png&quot;&gt;&lt;img src=&quot;/blog/assets/arcade1.png&quot; alt=&quot;arcade1&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After a swipe, it tells you how much credit you left and starts the game.&lt;/p&gt;

&lt;p&gt;To understand how all these works, I had to look inside those cards and maybe rewrite
them. When I was in DEF CON, I bought a magnetic stripe reader/writer and
lots of empty magnetic cards from &lt;a href=&quot;https://www.amazon.com/Misiri-RW605-Magstrip-Magnetic-Collector/dp/B00MHYJ8JQ/&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I turned back to Istanbul, I went to the arcade and checked the devices. They
 were using &lt;a href=&quot;https://www.intercardinc.com/&quot;&gt;Intercard&lt;/a&gt; machines. I bought 4 different cards.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Card 1: Has 0 credits&lt;/li&gt;
  &lt;li&gt;Card 2: Has 10 credits&lt;/li&gt;
  &lt;li&gt;Card 3: Has 20 credits&lt;/li&gt;
  &lt;li&gt;Card 4: Has 20 credits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since I have no previous knowledge about these systems, these cards will answer
all of the following questions:&lt;/p&gt;

&lt;p&gt;1) Is credit information is written inside the cards as plaintext? If the answer
is yes, I will see 0,10,20,20 values in cards.&lt;/p&gt;

&lt;p&gt;2) Is credit information is written inside the cards as encoded. If the answer is
yes, value of 3rd and 4th cards have to be same, the others will be different.&lt;/p&gt;

&lt;p&gt;3) If each card has unique ID? If the answer is yes, all cards have to carry a different
value.&lt;/p&gt;

&lt;p&gt;I checked the data inside the cards and all of them was different. They were carrying
a fixed-size alphanumeric ID value. So there is a server-client architecture inside the arcade.
Magnetic reader on the machine sends ID value to the server and server responds with a data
which states if I can play or not and how much credit left.&lt;/p&gt;

&lt;p&gt;We checked the devices but none of them has ethernet cables.
So, they are connected via WiFi. It was a promising attack vector in our case. But, I
decided to test everything about magnetic cards before jumping to the Wi-Fi.&lt;/p&gt;

&lt;h2 id=&quot;testing-for-race-condition&quot;&gt;Testing For Race Condition&lt;/h2&gt;

&lt;p&gt;I cloned a card with it’s unique ID which has 20 credits in it. My goal was swiping
two identical cards on different machines on the same time to catch a race condition 
vulnerability. If it works, we can play the second game for free. We tried
it in two machines which are both require 2 credits. We swipe the cards on the same time.&lt;/p&gt;

&lt;p&gt;First trial: Both card worked. One card showed 18 credits left, second card showed
16 credits left. (Probably we couldn’t swipe at the same time)&lt;/p&gt;

&lt;p&gt;Second trial: One card worked, the other showed a generic error. The worked card showed
14 credits left.&lt;/p&gt;

&lt;p&gt;Third trial: One card worked, the other showed a generic error. The worked card showed
12 credits left.&lt;/p&gt;

&lt;p&gt;At this point, I decided that race condition isn’t possible (or practical) since
we always get error on the other card when we swipe at the same time.&lt;/p&gt;

&lt;h2 id=&quot;bruteforcing-staff-cards-id&quot;&gt;Bruteforcing Staff Card’s ID&lt;/h2&gt;

&lt;p&gt;To configure magnetic card readers, there is a staff card (root access). 
When staff swipes zher card, zhe can start the game without paying any credit. This card looks same with the
customer card. Probably, server keeps the ID value of the staff card, and grants access
to the machines by checking that value. So, if I can identify staff card’s ID, I can
clone this ID to unlimited amount of cards.&lt;/p&gt;

&lt;p&gt;I tried lots of different ID’s such as &lt;code class=&quot;highlighter-rouge&quot;&gt;00000000&lt;/code&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;11111111&lt;/code&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;AAAAAAAA&lt;/code&gt; but no luck.
If I had Samy Kamkar’s magnetic stripe &lt;a href=&quot;https://samy.pl/magspoof/&quot;&gt;spoofer&lt;/a&gt; I could brute force
lots of combinations in short amount of time.&lt;/p&gt;

&lt;h2 id=&quot;attempts-for-infiltrating-the-arcade-network&quot;&gt;Attempts For Infiltrating The Arcade Network&lt;/h2&gt;

&lt;p&gt;If we could infiltrate inside the arcade network, we could listen client-server traffic
via ARP poisoning. After then, we could search vulnerabilities on communication or in
server itself. If their communication isn’t encrypted, we could change “Insufficient credit”
response with a positive one.&lt;/p&gt;

&lt;h3 id=&quot;capturing-and--cant--cracking-wifi-handshake&quot;&gt;Capturing and -can’t- Cracking WiFi Handshake&lt;/h3&gt;

&lt;p&gt;My first plan was conducting deauthentication attack to arcade machines and capture
a handshake when they try to reconnect. I used &lt;a href=&quot;https://www.amazon.com/Alfa-AWUS036NHA-Wireless-USB-Adaptor/dp/B004Y6MIXS&quot;&gt;Alfa card&lt;/a&gt; with &lt;a href=&quot;https://github.com/derv82/wifite2&quot;&gt;wifite2&lt;/a&gt; tool and it worked. 
I got a handshake. However, I couldn’t crack it. I tried online websites, run my GTX 1070 graphic card for 5
days but no luck. I’m not sure if Intercard provides router and default
password to the stores. If this is the case, they provided a strong password indeed.&lt;/p&gt;

&lt;h3 id=&quot;evil-twin-attack&quot;&gt;Evil Twin Attack&lt;/h3&gt;

&lt;p&gt;I’m not so good at WiFi hacking but I decided to try another attack that I know.
It’s the &lt;a href=&quot;https://en.wikipedia.org/wiki/Evil_twin_(wireless_networks)&quot;&gt;evil twin attack&lt;/a&gt;. My plan was 
creating fake access point with same SSID of their AP and sending deauthentication packets to arcade machines.
After then, they should connect to my AP. If it would work, I could analyze their requests to
the main server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Note&lt;/em&gt;&lt;/strong&gt; : &lt;em&gt;After few months later, I learnt something new about WiFi and
realized that this attack would never work. Since the target AP is protected with WPA2
and I didn’t know the password, disconnected devices won’t connect to my fake AP since
they won’t be able to do a handshake. Evil twin attack is useful for faking open
networks or abusing human behaviour, not for automated machines.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I prepared my laptop and a tool that I can’t remember it’s name for this attack. I could not conduct this attack from 
outside of the store. I had to create a strong signal to make this work. Because of that,
I started the tool, packed my backpack and went inside the store. I picked up medium-crowded
hour to not get any attention.&lt;/p&gt;

&lt;h3 id=&quot;the-chaos&quot;&gt;The Chaos&lt;/h3&gt;

&lt;p&gt;When I walked for 20 seconds inside the store, I was surprised. Most of the machines 
wasn’t working, people were swiping their cards over and over again. I went to
the broken machines and saw these:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/blog/assets/inter1.png&quot;&gt;&lt;img src=&quot;/blog/assets/inter1.png&quot; alt=&quot;Intercard1&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;/blog/assets/inter2.png&quot;&gt;&lt;img src=&quot;/blog/assets/inter2.png&quot; alt=&quot;Intercard2&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this moment, I was terrified. I realized that my evil twin attack broke those
machines. I immediately run away from the store, opened up my laptop and stopped the attack.
After 5 minutes, I turned back to the store again. Machines were still broken!
Somehow, they couldn’t get IP address.&lt;/p&gt;

&lt;h3 id=&quot;the-dos-vulnerability&quot;&gt;The DoS Vulnerability&lt;/h3&gt;

&lt;p&gt;To validate this vulnerability, I went to another store and targeted just one
arcade machine with deauthentication packets. I stopped the attack, went inside 
the store and started to look for a broken machine. I didn’t find any broken machine.
After a while, I realized that they are not using Intercard brand but using &lt;a href=&quot;https://www.embedcard.com/&quot;&gt;Embed&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I visited another branch of the arcade which uses Intercard. Conducted an deauthentication
attack to a single machine and found a broken one. So this is definitely a vulnerability
on Intercard’s side.&lt;/p&gt;

&lt;p&gt;I decided not to publish this vulnerability since any attacker may take down an
arcade amusement with a laptop and an Alfa card for days, maybe weeks. I &lt;a href=&quot;https://twitter.com/utkusen/status/1188184670481141761&quot;&gt;tweeted&lt;/a&gt; about this.
But later on, I’m convinced that this is a problem that Intercard must fix to help
their customers. It’s a basic attack, any medium-skilled attacker can find this
out.&lt;/p&gt;

&lt;p&gt;I sent details to Intercard but couldn’t get any response back. That’s why, I posted
this publicly.&lt;/p&gt;

&lt;div class=&quot;sharebuttons&quot;&gt;
  &lt;hr /&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;p class=&quot;sharetitle&quot;&gt; Share this: &lt;/p&gt;
    &lt;/li&gt;
    &lt;li class=&quot;reddit&quot;&gt;
      &lt;a href=&quot;http://www.reddit.com/submit?url=https://utkusen.com/blog/an-introduction-to-arcade-security.html&amp;amp;title=An%20Introduction%20to%20Arcade%20Security&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Reddit icon&lt;/title&gt;&lt;path d=&quot;M2.204 14.049c-.06.276-.091.56-.091.847 0 3.443 4.402 6.249 9.814 6.249 5.41 0 9.812-2.804 9.812-6.249 0-.274-.029-.546-.082-.809l-.015-.032c-.021-.055-.029-.11-.029-.165-.302-1.175-1.117-2.241-2.296-3.103-.045-.016-.088-.039-.126-.07-.026-.02-.045-.042-.067-.064-1.792-1.234-4.356-2.008-7.196-2.008-2.815 0-5.354.759-7.146 1.971-.014.018-.029.033-.049.049-.039.033-.084.06-.13.075-1.206.862-2.042 1.937-2.354 3.123 0 .058-.014.114-.037.171l-.008.015zm9.773 5.441c-1.794 0-3.057-.389-3.863-1.197-.173-.174-.173-.457 0-.632.176-.165.46-.165.635 0 .63.629 1.685.943 3.228.943 1.542 0 2.591-.3 3.219-.929.165-.164.45-.164.629 0 .165.18.165.465 0 .645-.809.808-2.065 1.198-3.862 1.198l.014-.028zm-3.606-7.573c-.914 0-1.677.765-1.677 1.677 0 .91.763 1.65 1.677 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm7.233 0c-.914 0-1.678.765-1.678 1.677 0 .91.764 1.65 1.678 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm4.548-1.595c1.037.833 1.8 1.821 2.189 2.904.45-.336.719-.864.719-1.449 0-1.002-.815-1.816-1.818-1.816-.399 0-.778.129-1.09.363v-.002zM2.711 9.963c-1.003 0-1.817.816-1.817 1.818 0 .543.239 1.048.644 1.389.401-1.079 1.172-2.053 2.213-2.876-.302-.21-.663-.329-1.039-.329v-.002zm9.217 12.079c-5.906 0-10.709-3.205-10.709-7.142 0-.275.023-.544.068-.809C.494 13.598 0 12.729 0 11.777c0-1.496 1.227-2.713 2.725-2.713.674 0 1.303.246 1.797.682 1.856-1.191 4.357-1.941 7.112-1.992l1.812-5.524.404.095s.016 0 .016.002l4.223.993c.344-.798 1.138-1.36 2.065-1.36 1.229 0 2.231 1.004 2.231 2.234 0 1.232-1.003 2.234-2.231 2.234s-2.23-1.004-2.23-2.23l-3.851-.912-1.467 4.477c2.65.105 5.047.854 6.844 2.021.494-.464 1.144-.719 1.833-.719 1.498 0 2.718 1.213 2.718 2.711 0 .987-.54 1.886-1.378 2.365.029.255.059.494.059.749-.015 3.938-4.806 7.143-10.72 7.143l-.034.009zm8.179-19.187c-.74 0-1.34.599-1.34 1.338 0 .738.6 1.34 1.34 1.34.732 0 1.33-.6 1.33-1.334 0-.733-.598-1.332-1.347-1.332l.017-.012z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;hn&quot;&gt;
      &lt;a href=&quot;http://news.ycombinator.com/submitlink?u=https://utkusen.com/blog/an-introduction-to-arcade-security.html&amp;amp;t=An%20Introduction%20to%20Arcade%20Security&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Y Combinator icon&lt;/title&gt;&lt;path d=&quot;M0 24V0h24v24H0zM6.951 5.896l4.112 7.708v5.064h1.583v-4.972l4.148-7.799h-1.749l-2.457 4.875c-.372.745-.688 1.434-.688 1.434s-.297-.708-.651-1.434L8.831 5.896h-1.88z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;twitter&quot;&gt;
      &lt;a href=&quot;https://twitter.com/intent/tweet?via=utkusen&amp;amp;url=https://utkusen.com/blog/an-introduction-to-arcade-security.html&amp;amp;text=An%20Introduction%20to%20Arcade%20Security&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Twitter icon&lt;/title&gt;&lt;path d=&quot;M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;linkedin&quot;&gt;
      &lt;a href=&quot;https://www.linkedin.com/shareArticle?mini=true&amp;amp;url=https://utkusen.com/blog/an-introduction-to-arcade-security.html&amp;amp;title=An%20Introduction%20to%20Arcade%20Security&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;LinkedIn icon&lt;/title&gt;&lt;path d=&quot;M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;style&gt;
/* Share buttons */
.sharebuttons {
  margin: 0 auto 0 auto;
}

.sharebuttons ul {
  margin: 20px 0 0 0;
  text-align: center;
}

.sharebuttons ul li {
  display: inline;
}

.sharebuttons ul li a {
  text-decoration: none;
}

.sharebuttons ul li svg {
  width: 40px;
  height: 40px;
}

.sharebuttons .reddit svg {
  fill: #FF4500;
}

.sharebuttons .hn svg {
  fill: #F0652F;
}

.sharebuttons .twitter svg {
  fill: #1DA1F2;
}

.sharebuttons .linkedin svg {
  fill: #0077B5;
}
&lt;/style&gt;</content><author><name></name></author><category term="Arcade" /><summary type="html">TL;DR This article contains my experiences on testing amusement arcade’s security. I found a DoS vulnerability on Intercard devices. An attacker can take down entire arcade machines by using this vulnerability. Me and my girlfriend love to spend hours in local arcades. I always wanted to know how their network works and are they secure or not. But I couldn’t find a comprehensive article about it. I decided to test them by myself. Learning The Fundamentals In most of the arcades, you need to have their magnetic stripe card. You need to go to the cashier and say how much credit you want. After that, she gets a random card from the stack, swipes it at a machine, presses some buttons on the screen and gives the card.</summary></entry><entry><title type="html">Serving Django App Statically at The Lowest Cost Possible</title><link href="https://utkusen.com/blog/serving-django-app-statically-lowest-cost.html" rel="alternate" type="text/html" title="Serving Django App Statically at The Lowest Cost Possible" /><published>2019-11-02T10:39:08+03:00</published><updated>2019-11-02T10:39:08+03:00</updated><id>https://utkusen.com/blog/serving-django-app-statically-lowest-cost</id><content type="html" xml:base="https://utkusen.com/blog/serving-django-app-statically-lowest-cost.html">&lt;p&gt;Two months ago, I was planning to publish a mobile app for both Android and iOS devices. However, I didn’t know how to code mobile apps natively. I found that there is an app type called “Webview” in which you just prepare a mobile friendly website and serve it inside the app. That was cool. So I coded the web application with Django framework. I just need to install it to a server, set a domain name and go. But what if I have thousands of active users in the future, how much resources will I need. Also, what if my competitors conduct DDOS attacks, will I have time or budget to deal with it? Answer was no. So I need some alternative methods.&lt;/p&gt;

&lt;p&gt;Basically, web application were doing following things:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Gather stats about football games from an API&lt;/li&gt;
  &lt;li&gt;Do predictions with precomputed machine learning model&lt;/li&gt;
  &lt;li&gt;Serve results inside the app&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first thing came into my mind was using a serverless architecture. I’m a big fan of that concept. It reduces the cost, attack surface, maintenance struggles. I coded few AWS Lambda functions before, for 10-15 users. But when I calculated the cost of thousands of users, it wasn’t cheap as I thought. Lambda+API Gateway would cost higher than $40 per month.&lt;/p&gt;

&lt;p&gt;I’m also big fan of static websites. It reduces the cost and attack surface much higher than the serverless architecture. For example, I’m publishing this blog statically via AWS S3 by using Jekyll framework. Since my Django app has no user interaction, I thought maybe I can serve it as a static website as well.&lt;/p&gt;

&lt;p&gt;I researched it a lot, tried couple of open source projects but no luck. I always encountered problems. There was no stable solution for converting a Django app to a static website. So I decided to make my own process. After some trials, my old friend &lt;a href=&quot;https://www.httrack.com/&quot;&gt;httrack&lt;/a&gt; was the most stable solution.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;So I created a Python script locally which covers everything. The overall process was like that:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Gather data, do secret calculations and write results to Django’s sqlite database:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;with open('games.json') as json_file:
    data = json.load(json_file)
    for i in data.items():
        cursor.execute(&quot;INSERT INTO deepapp_bet(home_team,away_team,date,country,pick) VALUES(?,?,?,?,?)&quot;,
            (i[1]['home_team'],i[1]['away_team'],i[1]['date'],i[1]['country'],i[1]['pick']))   
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Run Django web server locally:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;proc = subprocess.Popen([&quot;python3&quot;,&quot;/opt/deepscore/manage.py&quot;,&quot;runserver&quot;])
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Clone Django website with httrack&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;d = subprocess.check_output(['/usr/bin/httrack &quot;http://127.0.0.1:8000&quot; -O ' +base_dir+'/out -*.png -*.css -*.svg'],shell=True)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;I had to change URLs inside the HTML files with http://127.0.0.1:8000 with my production URL:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;def findReplace(directory, find, replace, filePattern):
    for path, dirs, files in os.walk(os.path.abspath(directory)):
        for filename in fnmatch.filter(files, filePattern):
            filepath = os.path.join(path, filename)
            with open(filepath) as f:
                s = f.read()
            s = s.replace(find, replace)
            with open(filepath, &quot;w&quot;) as f:
                f.write(s)

findReplace(base_dir+&quot;/out/127.0.0.1_8000&quot;, &quot;http://127.0.0.1:8000&quot;, &quot;https://deepscoreapp.com&quot;, &quot;*.html&quot;)
findReplace(base_dir+&quot;/out/127.0.0.1_8000/match&quot;, &quot;http://127.0.0.1:8000&quot;, &quot;https://deepscoreapp.com&quot;, &quot;*.html&quot;)                
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Send data to S3 bucket:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;d = subprocess.check_output(['/usr/local/bin/aws s3 sync . s3://prodwebsite.com'],shell=True,cwd=base_dir+&quot;/out/127.0.0.1_8000&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;bonus-redirecting-users-based-on-their-country-with-cloudflare-workers&quot;&gt;Bonus: Redirecting Users Based on Their Country With Cloudflare Workers&lt;/h3&gt;

&lt;p&gt;There is one thing I didn’t mention in the first part. If user is located in Turkey, I need to redirect zhe to website.com/tr. It was possible with the Django app, but I can’t run any code since whole website lies statically on a S3 bucket. &lt;a href=&quot;https://www.cloudflare.com/products/cloudflare-workers/&quot;&gt;Cloudflare workers&lt;/a&gt; was the solution for that. By writing some Javascript code, you can achieve the same goals with the original Django application.&lt;/p&gt;

&lt;p&gt;This my script which redirects users to specific URIs, according to their countries&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'fetch'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;respondWith&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;handleRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;handleRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;url&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;URL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pathname&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;country&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'CF-IpCountry'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;static&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;media&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;){&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;country&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'TR'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;){&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'https://deepscoreapp.com/tr/match/'&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pathname&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'https://deepscoreapp.com/tr/'&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
      
    
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;match&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;){&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'https://deepscoreapp.com/match/'&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pathname&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'/'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'https://deepscoreapp.com/'&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;results&quot;&gt;Results&lt;/h2&gt;

&lt;p&gt;I got 346,700 requests yesterday and Cloudflare cached most of them (images, css etc.)&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/blog/assets/deepcf.png&quot;&gt;&lt;img src=&quot;/blog/assets/deepcf.png&quot; alt=&quot;Cloudflare Stats&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And my monthly S3 cost is too low 😍:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/blog/assets/deepcost.png&quot;&gt;&lt;img src=&quot;/blog/assets/deepcost.png&quot; alt=&quot;Cloudflare Stats&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The mobile app’s name is “Deepscore”, you can download it from both &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.us.deepscore&quot;&gt;Google Play&lt;/a&gt; and &lt;a href=&quot;https://apps.apple.com/tr/app/deepscore-betting-prediction/id1481041201&quot;&gt;App Store&lt;/a&gt; if you are interested in football predictions :)&lt;/p&gt;

&lt;div class=&quot;sharebuttons&quot;&gt;
  &lt;hr /&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;p class=&quot;sharetitle&quot;&gt; Share this: &lt;/p&gt;
    &lt;/li&gt;
    &lt;li class=&quot;reddit&quot;&gt;
      &lt;a href=&quot;http://www.reddit.com/submit?url=https://utkusen.com/blog/serving-django-app-statically-lowest-cost.html&amp;amp;title=Serving%20Django%20App%20Statically%20at%20The%20Lowest%20Cost%20Possible&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Reddit icon&lt;/title&gt;&lt;path d=&quot;M2.204 14.049c-.06.276-.091.56-.091.847 0 3.443 4.402 6.249 9.814 6.249 5.41 0 9.812-2.804 9.812-6.249 0-.274-.029-.546-.082-.809l-.015-.032c-.021-.055-.029-.11-.029-.165-.302-1.175-1.117-2.241-2.296-3.103-.045-.016-.088-.039-.126-.07-.026-.02-.045-.042-.067-.064-1.792-1.234-4.356-2.008-7.196-2.008-2.815 0-5.354.759-7.146 1.971-.014.018-.029.033-.049.049-.039.033-.084.06-.13.075-1.206.862-2.042 1.937-2.354 3.123 0 .058-.014.114-.037.171l-.008.015zm9.773 5.441c-1.794 0-3.057-.389-3.863-1.197-.173-.174-.173-.457 0-.632.176-.165.46-.165.635 0 .63.629 1.685.943 3.228.943 1.542 0 2.591-.3 3.219-.929.165-.164.45-.164.629 0 .165.18.165.465 0 .645-.809.808-2.065 1.198-3.862 1.198l.014-.028zm-3.606-7.573c-.914 0-1.677.765-1.677 1.677 0 .91.763 1.65 1.677 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm7.233 0c-.914 0-1.678.765-1.678 1.677 0 .91.764 1.65 1.678 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm4.548-1.595c1.037.833 1.8 1.821 2.189 2.904.45-.336.719-.864.719-1.449 0-1.002-.815-1.816-1.818-1.816-.399 0-.778.129-1.09.363v-.002zM2.711 9.963c-1.003 0-1.817.816-1.817 1.818 0 .543.239 1.048.644 1.389.401-1.079 1.172-2.053 2.213-2.876-.302-.21-.663-.329-1.039-.329v-.002zm9.217 12.079c-5.906 0-10.709-3.205-10.709-7.142 0-.275.023-.544.068-.809C.494 13.598 0 12.729 0 11.777c0-1.496 1.227-2.713 2.725-2.713.674 0 1.303.246 1.797.682 1.856-1.191 4.357-1.941 7.112-1.992l1.812-5.524.404.095s.016 0 .016.002l4.223.993c.344-.798 1.138-1.36 2.065-1.36 1.229 0 2.231 1.004 2.231 2.234 0 1.232-1.003 2.234-2.231 2.234s-2.23-1.004-2.23-2.23l-3.851-.912-1.467 4.477c2.65.105 5.047.854 6.844 2.021.494-.464 1.144-.719 1.833-.719 1.498 0 2.718 1.213 2.718 2.711 0 .987-.54 1.886-1.378 2.365.029.255.059.494.059.749-.015 3.938-4.806 7.143-10.72 7.143l-.034.009zm8.179-19.187c-.74 0-1.34.599-1.34 1.338 0 .738.6 1.34 1.34 1.34.732 0 1.33-.6 1.33-1.334 0-.733-.598-1.332-1.347-1.332l.017-.012z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;hn&quot;&gt;
      &lt;a href=&quot;http://news.ycombinator.com/submitlink?u=https://utkusen.com/blog/serving-django-app-statically-lowest-cost.html&amp;amp;t=Serving%20Django%20App%20Statically%20at%20The%20Lowest%20Cost%20Possible&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Y Combinator icon&lt;/title&gt;&lt;path d=&quot;M0 24V0h24v24H0zM6.951 5.896l4.112 7.708v5.064h1.583v-4.972l4.148-7.799h-1.749l-2.457 4.875c-.372.745-.688 1.434-.688 1.434s-.297-.708-.651-1.434L8.831 5.896h-1.88z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;twitter&quot;&gt;
      &lt;a href=&quot;https://twitter.com/intent/tweet?via=utkusen&amp;amp;url=https://utkusen.com/blog/serving-django-app-statically-lowest-cost.html&amp;amp;text=Serving%20Django%20App%20Statically%20at%20The%20Lowest%20Cost%20Possible&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Twitter icon&lt;/title&gt;&lt;path d=&quot;M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;linkedin&quot;&gt;
      &lt;a href=&quot;https://www.linkedin.com/shareArticle?mini=true&amp;amp;url=https://utkusen.com/blog/serving-django-app-statically-lowest-cost.html&amp;amp;title=Serving%20Django%20App%20Statically%20at%20The%20Lowest%20Cost%20Possible&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;LinkedIn icon&lt;/title&gt;&lt;path d=&quot;M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;style&gt;
/* Share buttons */
.sharebuttons {
  margin: 0 auto 0 auto;
}

.sharebuttons ul {
  margin: 20px 0 0 0;
  text-align: center;
}

.sharebuttons ul li {
  display: inline;
}

.sharebuttons ul li a {
  text-decoration: none;
}

.sharebuttons ul li svg {
  width: 40px;
  height: 40px;
}

.sharebuttons .reddit svg {
  fill: #FF4500;
}

.sharebuttons .hn svg {
  fill: #F0652F;
}

.sharebuttons .twitter svg {
  fill: #1DA1F2;
}

.sharebuttons .linkedin svg {
  fill: #0077B5;
}
&lt;/style&gt;</content><author><name></name></author><category term="Django" /><summary type="html">Two months ago, I was planning to publish a mobile app for both Android and iOS devices. However, I didn’t know how to code mobile apps natively. I found that there is an app type called “Webview” in which you just prepare a mobile friendly website and serve it inside the app. That was cool. So I coded the web application with Django framework. I just need to install it to a server, set a domain name and go. But what if I have thousands of active users in the future, how much resources will I need. Also, what if my competitors conduct DDOS attacks, will I have time or budget to deal with it? Answer was no. So I need some alternative methods. Basically, web application were doing following things: Gather stats about football games from an API Do predictions with precomputed machine learning model Serve results inside the app The first thing came into my mind was using a serverless architecture. I’m a big fan of that concept. It reduces the cost, attack surface, maintenance struggles. I coded few AWS Lambda functions before, for 10-15 users. But when I calculated the cost of thousands of users, it wasn’t cheap as I thought. Lambda+API Gateway would cost higher than $40 per month. I’m also big fan of static websites. It reduces the cost and attack surface much higher than the serverless architecture. For example, I’m publishing this blog statically via AWS S3 by using Jekyll framework. Since my Django app has no user interaction, I thought maybe I can serve it as a static website as well. I researched it a lot, tried couple of open source projects but no luck. I always encountered problems. There was no stable solution for converting a Django app to a static website. So I decided to make my own process. After some trials, my old friend httrack was the most stable solution.</summary></entry><entry><title type="html">An Empire Module to Detect PII Data in Office Documents</title><link href="https://utkusen.com/blog/an-empire-module-to-detect-pii-data.html" rel="alternate" type="text/html" title="An Empire Module to Detect PII Data in Office Documents" /><published>2019-10-29T10:39:08+03:00</published><updated>2019-10-29T10:39:08+03:00</updated><id>https://utkusen.com/blog/an-empire-module-to-detect-pii-data</id><content type="html" xml:base="https://utkusen.com/blog/an-empire-module-to-detect-pii-data.html">&lt;p&gt;I coded an Empire module which detects PII data in given Office documents. You can access to the pull request of mine which includes the module from here: &lt;a href=&quot;https://github.com/BC-SECURITY/Empire/pull/4&quot;&gt;https://github.com/BC-SECURITY/Empire/pull/4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or, you can get the powershell script alone in here: &lt;a href=&quot;https://gist.github.com/utkusen/03c8ff388e76d45c1ec79580772d8a78&quot;&gt;https://gist.github.com/utkusen/03c8ff388e76d45c1ec79580772d8a78&lt;/a&gt;
&lt;!--more--&gt;&lt;/p&gt;

&lt;div class=&quot;sharebuttons&quot;&gt;
  &lt;hr /&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;p class=&quot;sharetitle&quot;&gt; Share this: &lt;/p&gt;
    &lt;/li&gt;
    &lt;li class=&quot;reddit&quot;&gt;
      &lt;a href=&quot;http://www.reddit.com/submit?url=https://utkusen.com/blog/an-empire-module-to-detect-pii-data.html&amp;amp;title=An%20Empire%20Module%20to%20Detect%20PII%20Data%20in%20Office%20Documents&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Reddit icon&lt;/title&gt;&lt;path d=&quot;M2.204 14.049c-.06.276-.091.56-.091.847 0 3.443 4.402 6.249 9.814 6.249 5.41 0 9.812-2.804 9.812-6.249 0-.274-.029-.546-.082-.809l-.015-.032c-.021-.055-.029-.11-.029-.165-.302-1.175-1.117-2.241-2.296-3.103-.045-.016-.088-.039-.126-.07-.026-.02-.045-.042-.067-.064-1.792-1.234-4.356-2.008-7.196-2.008-2.815 0-5.354.759-7.146 1.971-.014.018-.029.033-.049.049-.039.033-.084.06-.13.075-1.206.862-2.042 1.937-2.354 3.123 0 .058-.014.114-.037.171l-.008.015zm9.773 5.441c-1.794 0-3.057-.389-3.863-1.197-.173-.174-.173-.457 0-.632.176-.165.46-.165.635 0 .63.629 1.685.943 3.228.943 1.542 0 2.591-.3 3.219-.929.165-.164.45-.164.629 0 .165.18.165.465 0 .645-.809.808-2.065 1.198-3.862 1.198l.014-.028zm-3.606-7.573c-.914 0-1.677.765-1.677 1.677 0 .91.763 1.65 1.677 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm7.233 0c-.914 0-1.678.765-1.678 1.677 0 .91.764 1.65 1.678 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm4.548-1.595c1.037.833 1.8 1.821 2.189 2.904.45-.336.719-.864.719-1.449 0-1.002-.815-1.816-1.818-1.816-.399 0-.778.129-1.09.363v-.002zM2.711 9.963c-1.003 0-1.817.816-1.817 1.818 0 .543.239 1.048.644 1.389.401-1.079 1.172-2.053 2.213-2.876-.302-.21-.663-.329-1.039-.329v-.002zm9.217 12.079c-5.906 0-10.709-3.205-10.709-7.142 0-.275.023-.544.068-.809C.494 13.598 0 12.729 0 11.777c0-1.496 1.227-2.713 2.725-2.713.674 0 1.303.246 1.797.682 1.856-1.191 4.357-1.941 7.112-1.992l1.812-5.524.404.095s.016 0 .016.002l4.223.993c.344-.798 1.138-1.36 2.065-1.36 1.229 0 2.231 1.004 2.231 2.234 0 1.232-1.003 2.234-2.231 2.234s-2.23-1.004-2.23-2.23l-3.851-.912-1.467 4.477c2.65.105 5.047.854 6.844 2.021.494-.464 1.144-.719 1.833-.719 1.498 0 2.718 1.213 2.718 2.711 0 .987-.54 1.886-1.378 2.365.029.255.059.494.059.749-.015 3.938-4.806 7.143-10.72 7.143l-.034.009zm8.179-19.187c-.74 0-1.34.599-1.34 1.338 0 .738.6 1.34 1.34 1.34.732 0 1.33-.6 1.33-1.334 0-.733-.598-1.332-1.347-1.332l.017-.012z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;hn&quot;&gt;
      &lt;a href=&quot;http://news.ycombinator.com/submitlink?u=https://utkusen.com/blog/an-empire-module-to-detect-pii-data.html&amp;amp;t=An%20Empire%20Module%20to%20Detect%20PII%20Data%20in%20Office%20Documents&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Y Combinator icon&lt;/title&gt;&lt;path d=&quot;M0 24V0h24v24H0zM6.951 5.896l4.112 7.708v5.064h1.583v-4.972l4.148-7.799h-1.749l-2.457 4.875c-.372.745-.688 1.434-.688 1.434s-.297-.708-.651-1.434L8.831 5.896h-1.88z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;twitter&quot;&gt;
      &lt;a href=&quot;https://twitter.com/intent/tweet?via=utkusen&amp;amp;url=https://utkusen.com/blog/an-empire-module-to-detect-pii-data.html&amp;amp;text=An%20Empire%20Module%20to%20Detect%20PII%20Data%20in%20Office%20Documents&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Twitter icon&lt;/title&gt;&lt;path d=&quot;M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;linkedin&quot;&gt;
      &lt;a href=&quot;https://www.linkedin.com/shareArticle?mini=true&amp;amp;url=https://utkusen.com/blog/an-empire-module-to-detect-pii-data.html&amp;amp;title=An%20Empire%20Module%20to%20Detect%20PII%20Data%20in%20Office%20Documents&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;LinkedIn icon&lt;/title&gt;&lt;path d=&quot;M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;style&gt;
/* Share buttons */
.sharebuttons {
  margin: 0 auto 0 auto;
}

.sharebuttons ul {
  margin: 20px 0 0 0;
  text-align: center;
}

.sharebuttons ul li {
  display: inline;
}

.sharebuttons ul li a {
  text-decoration: none;
}

.sharebuttons ul li svg {
  width: 40px;
  height: 40px;
}

.sharebuttons .reddit svg {
  fill: #FF4500;
}

.sharebuttons .hn svg {
  fill: #F0652F;
}

.sharebuttons .twitter svg {
  fill: #1DA1F2;
}

.sharebuttons .linkedin svg {
  fill: #0077B5;
}
&lt;/style&gt;</content><author><name></name></author><category term="Empire" /><summary type="html">I coded an Empire module which detects PII data in given Office documents. You can access to the pull request of mine which includes the module from here: https://github.com/BC-SECURITY/Empire/pull/4 Or, you can get the powershell script alone in here: https://gist.github.com/utkusen/03c8ff388e76d45c1ec79580772d8a78</summary></entry><entry><title type="html">Generating Personalized Wordlists with NLP For Password Guessing Attacks</title><link href="https://utkusen.com/blog/generating-personalized-wordlists.html" rel="alternate" type="text/html" title="Generating Personalized Wordlists with NLP For Password Guessing Attacks" /><published>2019-08-12T10:39:08+03:00</published><updated>2019-08-12T10:39:08+03:00</updated><id>https://utkusen.com/blog/generating-personalized-wordlists</id><content type="html" xml:base="https://utkusen.com/blog/generating-personalized-wordlists.html">&lt;h3 id=&quot;tldr&quot;&gt;TL;DR&lt;/h3&gt;

&lt;p&gt;I coded a tool named &lt;a href=&quot;https://github.com/tearsecurity/rhodiola&quot;&gt;Rhodiola&lt;/a&gt; which can analyze data about a target (for example target’s tweets) and detects most used themes in there and builds a personalized wordlist for password guessing. It’s an experimental project for creating a new approach for password guessing attacks.&lt;/p&gt;

&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;

&lt;p&gt;Passwords are our main security mechanism for digital accounts since the beginning of the internet. Because of that, passwords are one of the main targets of attackers. There are couple of major ways that an attacker can use to find a target’s password. The attacker can prepare a phishing website to trick a target into entering their passwords to a rogue website. Or, an attacker can conduct a password guessing attack through brute forcing. Password guessing attacks can be described in two main categories: online attacks and offline attacks.&lt;/p&gt;

&lt;p&gt;Online password guessing attack is where the attacker sends username/password combinations to a service like HTTP, SSH etc. and tries to identify the correct combination by checking the response from the services. An offline password guessing attack is usually conducted against hashed forms of passwords.The attacker has to calculate a password’s hash with a suitable cryptographic hashing function and should compare it with target hash. For both online and offline attacks, the attacker usually needs to have a password wordlist. Most of the web applications have password complexity rules where users have to use at least one number, upper/lower case letters and a special character. Also there are lot’s of precautions such as IP blocking, account freezing etc. Therefore, reducing the number of trials is very important for attackers.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;mask-attacks&quot;&gt;Mask Attacks&lt;/h2&gt;

&lt;p&gt;Mask attack is one of the main methods for reducing the brute force pool to an acceptable size. Mask attack refers to specifying a fixed password structure and generating candidate passwords according to that. For example, to crack ”Julia1984” as a password with pure brute force approach, we need to calculate 13.537.086.546.263.552 different combinations. But if we set a mask with its structure, we can reduce the combination pool to 237.627.520.000. But of course, it’s still too much for the online attacks. We usually can’t send two hundred billions request to an application over internet.&lt;/p&gt;

&lt;h2 id=&quot;sherlocks-way&quot;&gt;Sherlock’s Way&lt;/h2&gt;

&lt;p&gt;However, pure brute force and mask attacks are not the only way for password guessing. There is also a science fiction method based on smart guessing. For example on Sherlock’s Hound of Baskerville episode, Sherlock Holmes was checking personal stuff of the target and were guessing the correct password in one shot. But how can we do it in real life?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/sherlocktweet.png&quot; alt=&quot;Tweet&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Let’s assume that target is posted that tweet and we are a Sherlock Holmes candidate. We can make following deductions: target’s daughter name is Julia and target loves her so much since he or she tweets about her. And target’s favorite author is George Orwell, who’s most popular book is 1984. So combine them together, the answer is “Julia1984” Is this that simple?&lt;/p&gt;

&lt;p&gt;According to experiments conducted by Carnegie Mellon and Carleton universities, most people are choosing words for their passwords based on personal topics such as hobbies, work, religion, sports, video games, etc.[1][2] This means that most of the user passwords are contains meaningful words and they are related with the password’s owner. So in theory, we can become a sherlock holmes on password cracking. Let’s validate this.&lt;/p&gt;

&lt;h2 id=&quot;analyzing-myspace-and-ashley-madison-wordlists&quot;&gt;Analyzing Myspace and Ashley Madison Wordlists&lt;/h2&gt;

&lt;p&gt;When we analyze leaked Myspace and Ashley Madison password lists with PACK (Password Analysis and Cracking Kit) and generate the most used masks, we can see that almost 95% percent of the passwords are formed by sequential alphabetic characters. So there is a high probability that these are meaningful words. Some of the most popular masks are:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;?l?l?l?l?l?l: 7%
?l?l?l?l?l?l?l?l: 7%
?l?l?l?l?l?l?l: 6%
?l?l?l?l?l?l?d?d: 4%
?l?l?l?l?l?l?l?l?l: 4%
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Since both Ashley Madison and Myspace wordlists are mostly consists of sequential alpha characters, there is a high probability that they are meaningful words. If they are somehow meaningful, we can fill the mask with meaningful words instead of brute forcing the characters.
The first step is understanding if a letter sequence is a meaningful word in the English language. We can state that a letter sequence is an English word if it’s listed in an English lexicon. I used Wordnet as the lexicon. The analyze is showed that almost fourthy percent of those wordlists are included in Wordnet lexicon, hence they are meaningful English words.&lt;/p&gt;

&lt;p&gt;After it’s confirmed that the letter sequence is included in Wordnet, hence it’s an English word, we need to do part-of-speech tagging (POS tagging). There are eight parts of speech in the English language: noun, pronoun, verb, adjective, adverb, preposition, conjunction, and interjection. POS tagging is the process of marking up a word in a text as corresponding to a particular part of speech. NLTK Python library is used for POS tagging.&lt;/p&gt;

&lt;p&gt;To understand which part of speech is usually located in human-designed passwords, we’ve analyzed Myspace and Ashley Madison wordlists again.. The code that was used to analyze named ”word classifier.py” is located in &lt;a href=&quot;https://github.com/tearsecurity/rhodiola/blob/master/helpers/wordlist_classify.py&quot;&gt;here&lt;/a&gt;
The result showed that most of the words are singular nouns (32%)&lt;/p&gt;

&lt;p&gt;If we use all words in the Oxford English Directory, the combination pool will be 171,476. If we use ”?l?l?l?l?l?l” mask to brute force all six-character alphabetic strings, the combination pool will be 308.915.776. So, trying all English words in dictionary would be 1801 times faster than using a mask. But 171,476 is a still big number for online attacks.&lt;/p&gt;

&lt;h2 id=&quot;sherlocks-way-again&quot;&gt;Sherlock’s Way (Again)&lt;/h2&gt;

&lt;p&gt;So let’s recap what kind of facts that we have so far. First, our analyze is showed that people are using meaningful words for their passwords. And the second, from the research conducted by various of universities, we know that passwords are mostly based on personal topics. So Sherlock Holmes method is legit in theory. But can it be done in practise? What Sherlock Holmes did was analyzing personal topics about the target. Then, he combined them in his mind and came up with a candidate password.&lt;/p&gt;

&lt;p&gt;But can we do it in real life? To achieve this, we need information about target and an algorithm which extracts good password candidates from that information. We need a data source about the target just like Sherlock Holmes had. We need a source where we can find hobbies and other interest areas of the target. We all know that kind of source. It’s Twitter of course. In Twitter, people are tend to write posts about their hobbies and other interest areas. Since there is a character limitation for the tweets, users should write things more focused. And this make things easier for us. We don’t need to deal with large, gibberish texts. So let’s use the Twitter as a data source and try to build our personalized wordlist generator algorithm.&lt;/p&gt;

&lt;h2 id=&quot;building-the-algorithm&quot;&gt;Building the Algorithm&lt;/h2&gt;

&lt;h3 id=&quot;downloading-and-cleaning-tweet-data&quot;&gt;Downloading and Cleaning Tweet Data&lt;/h3&gt;

&lt;p&gt;First of all, we need to gather tweets from target via Twitter’s API. Since our goal is to identify a user’s personal topics and generate related words about it, we need to remove unnecessary data (stop words) from downloaded tweets. Both NLTK’s stopwords extension and a custom list are used. Lists contains high-frequency words like ”the,a,an,to,that,i,you,we,they”. These words are removed before processing the data. We also removed verbs since passwords are mostly contains nouns.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/sherlocktweet2.png&quot; alt=&quot;Tweet&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;identifying-most-used-nouns-and-proper-nouns&quot;&gt;Identifying Most Used Nouns and Proper Nouns&lt;/h3&gt;

&lt;p&gt;As shown in the previous section, almost 32% of the user passwords are consists singular nouns. Therefore, our first goal is to identify the most used nouns and proper nouns. The topics that the user is interested most can be identified with them. The most used nouns and proper nouns are identified with NLTK’s POS tagging function. For the example tweet above, nouns are: author and daughter. Proper nouns are: George Orwell and Julia.&lt;/p&gt;

&lt;h3 id=&quot;pairing-similar-words&quot;&gt;Pairing Similar Words&lt;/h3&gt;

&lt;p&gt;In some cases, nouns can be used together. To create meaningful word pairs, we need to analyze their semantic similarities. For this purpose, NLTK’s path similarity[16] is used with the first noun meaning (n.01) on Wordnet for all identified nouns. The path similarity returns a score denoting how similar two word senses are, based on the shortest path that connects the senses in the is-a (hypernym/hyponym) taxonomy. The score is in the range 0 to 1. Our algorithm pairs any two nouns if their similarity score is higher than 0.12.&lt;/p&gt;

&lt;h3 id=&quot;finding-related-helper-words&quot;&gt;Finding Related Helper Words&lt;/h3&gt;

&lt;p&gt;Researchers have found that some of the most used semantic themes in passwords are locations and years. Therefore, related locations and years to a user’s interest areas should’ve been found. Wikipedia is used for both works. Our algorithm visits each proper noun’s Wikipedia page and parses years with regex and identifies city names with its hardcoded city list. In the example tweet above, when we send “George Orwell” to Wikipedia, our algorithm will parse words such as London, 1984 etc.&lt;/p&gt;

&lt;h3 id=&quot;combining-everything&quot;&gt;Combining Everything&lt;/h3&gt;

&lt;p&gt;The last step is combining all of our data. From the example Tweet we got George Orwell word, we sent it to Wikipedia and it returned us 1984. Beyond that we also had Julia as a proper noun. So when we combine all of our data, we will have the correct password “Julia1984” in somewhere in our wordlist. So instead of millions of combinations, we could crack this password just like Sherlock Holmes.&lt;/p&gt;

&lt;h2 id=&quot;rhodiola-tool&quot;&gt;Rhodiola Tool&lt;/h2&gt;

&lt;p&gt;Rhodiola is written in Python 2.7 and mostly based on NLTK and textblob libraries. With a given Twitter handle (If you don’t have that one, you can bring your own data. Check the Github page for details), it can automatically can compile a personalized wordlist with the following elements: Most used nouns&amp;amp;proper nouns, paired nouns&amp;amp;proper nouns, cities and years related to detected proper nouns. For example:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/elonmuskrhod.png&quot; alt=&quot;Elonmusk&quot; /&gt;&lt;/p&gt;

&lt;p&gt;For detailed usage check it’s Github page: &lt;a href=&quot;https://github.com/tearsecurity/rhodiola&quot;&gt;https://github.com/tearsecurity/rhodiola&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Since people tend to use words from their interest areas for their passwords and expose those interest areas on Twitter, it’s possible for an attacker to create a wordlist by analyzing a target’s tweets. Beyond Twitter, any actor that has much more data about a person will have an ability to create more accurate wordlists. Therefore, users should avoid using words from the topics that are exposed in social media. It’s better to use random passwords that are stored in a password manager software.&lt;/p&gt;

&lt;div class=&quot;sharebuttons&quot;&gt;
  &lt;hr /&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;p class=&quot;sharetitle&quot;&gt; Share this: &lt;/p&gt;
    &lt;/li&gt;
    &lt;li class=&quot;reddit&quot;&gt;
      &lt;a href=&quot;http://www.reddit.com/submit?url=https://utkusen.com/blog/generating-personalized-wordlists.html&amp;amp;title=Generating%20Personalized%20Wordlists%20with%20NLP%20For%20Password%20Guessing%20Attacks&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Reddit icon&lt;/title&gt;&lt;path d=&quot;M2.204 14.049c-.06.276-.091.56-.091.847 0 3.443 4.402 6.249 9.814 6.249 5.41 0 9.812-2.804 9.812-6.249 0-.274-.029-.546-.082-.809l-.015-.032c-.021-.055-.029-.11-.029-.165-.302-1.175-1.117-2.241-2.296-3.103-.045-.016-.088-.039-.126-.07-.026-.02-.045-.042-.067-.064-1.792-1.234-4.356-2.008-7.196-2.008-2.815 0-5.354.759-7.146 1.971-.014.018-.029.033-.049.049-.039.033-.084.06-.13.075-1.206.862-2.042 1.937-2.354 3.123 0 .058-.014.114-.037.171l-.008.015zm9.773 5.441c-1.794 0-3.057-.389-3.863-1.197-.173-.174-.173-.457 0-.632.176-.165.46-.165.635 0 .63.629 1.685.943 3.228.943 1.542 0 2.591-.3 3.219-.929.165-.164.45-.164.629 0 .165.18.165.465 0 .645-.809.808-2.065 1.198-3.862 1.198l.014-.028zm-3.606-7.573c-.914 0-1.677.765-1.677 1.677 0 .91.763 1.65 1.677 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm7.233 0c-.914 0-1.678.765-1.678 1.677 0 .91.764 1.65 1.678 1.65s1.651-.74 1.651-1.65c0-.912-.739-1.677-1.651-1.677zm4.548-1.595c1.037.833 1.8 1.821 2.189 2.904.45-.336.719-.864.719-1.449 0-1.002-.815-1.816-1.818-1.816-.399 0-.778.129-1.09.363v-.002zM2.711 9.963c-1.003 0-1.817.816-1.817 1.818 0 .543.239 1.048.644 1.389.401-1.079 1.172-2.053 2.213-2.876-.302-.21-.663-.329-1.039-.329v-.002zm9.217 12.079c-5.906 0-10.709-3.205-10.709-7.142 0-.275.023-.544.068-.809C.494 13.598 0 12.729 0 11.777c0-1.496 1.227-2.713 2.725-2.713.674 0 1.303.246 1.797.682 1.856-1.191 4.357-1.941 7.112-1.992l1.812-5.524.404.095s.016 0 .016.002l4.223.993c.344-.798 1.138-1.36 2.065-1.36 1.229 0 2.231 1.004 2.231 2.234 0 1.232-1.003 2.234-2.231 2.234s-2.23-1.004-2.23-2.23l-3.851-.912-1.467 4.477c2.65.105 5.047.854 6.844 2.021.494-.464 1.144-.719 1.833-.719 1.498 0 2.718 1.213 2.718 2.711 0 .987-.54 1.886-1.378 2.365.029.255.059.494.059.749-.015 3.938-4.806 7.143-10.72 7.143l-.034.009zm8.179-19.187c-.74 0-1.34.599-1.34 1.338 0 .738.6 1.34 1.34 1.34.732 0 1.33-.6 1.33-1.334 0-.733-.598-1.332-1.347-1.332l.017-.012z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;hn&quot;&gt;
      &lt;a href=&quot;http://news.ycombinator.com/submitlink?u=https://utkusen.com/blog/generating-personalized-wordlists.html&amp;amp;t=Generating%20Personalized%20Wordlists%20with%20NLP%20For%20Password%20Guessing%20Attacks&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Y Combinator icon&lt;/title&gt;&lt;path d=&quot;M0 24V0h24v24H0zM6.951 5.896l4.112 7.708v5.064h1.583v-4.972l4.148-7.799h-1.749l-2.457 4.875c-.372.745-.688 1.434-.688 1.434s-.297-.708-.651-1.434L8.831 5.896h-1.88z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;twitter&quot;&gt;
      &lt;a href=&quot;https://twitter.com/intent/tweet?via=utkusen&amp;amp;url=https://utkusen.com/blog/generating-personalized-wordlists.html&amp;amp;text=Generating%20Personalized%20Wordlists%20with%20NLP%20For%20Password%20Guessing%20Attacks&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;Twitter icon&lt;/title&gt;&lt;path d=&quot;M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
    &lt;li class=&quot;linkedin&quot;&gt;
      &lt;a href=&quot;https://www.linkedin.com/shareArticle?mini=true&amp;amp;url=https://utkusen.com/blog/generating-personalized-wordlists.html&amp;amp;title=Generating%20Personalized%20Wordlists%20with%20NLP%20For%20Password%20Guessing%20Attacks&quot; target=&quot;_blank&quot;&gt;
        &lt;svg role=&quot;img&quot; viewBox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title&gt;LinkedIn icon&lt;/title&gt;&lt;path d=&quot;M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z&quot; /&gt;&lt;/svg&gt;
      &lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;style&gt;
/* Share buttons */
.sharebuttons {
  margin: 0 auto 0 auto;
}

.sharebuttons ul {
  margin: 20px 0 0 0;
  text-align: center;
}

.sharebuttons ul li {
  display: inline;
}

.sharebuttons ul li a {
  text-decoration: none;
}

.sharebuttons ul li svg {
  width: 40px;
  height: 40px;
}

.sharebuttons .reddit svg {
  fill: #FF4500;
}

.sharebuttons .hn svg {
  fill: #F0652F;
}

.sharebuttons .twitter svg {
  fill: #1DA1F2;
}

.sharebuttons .linkedin svg {
  fill: #0077B5;
}
&lt;/style&gt;</content><author><name></name></author><category term="Rhodiola" /><summary type="html">TL;DR I coded a tool named Rhodiola which can analyze data about a target (for example target’s tweets) and detects most used themes in there and builds a personalized wordlist for password guessing. It’s an experimental project for creating a new approach for password guessing attacks. Introduction Passwords are our main security mechanism for digital accounts since the beginning of the internet. Because of that, passwords are one of the main targets of attackers. There are couple of major ways that an attacker can use to find a target’s password. The attacker can prepare a phishing website to trick a target into entering their passwords to a rogue website. Or, an attacker can conduct a password guessing attack through brute forcing. Password guessing attacks can be described in two main categories: online attacks and offline attacks. Online password guessing attack is where the attacker sends username/password combinations to a service like HTTP, SSH etc. and tries to identify the correct combination by checking the response from the services. An offline password guessing attack is usually conducted against hashed forms of passwords.The attacker has to calculate a password’s hash with a suitable cryptographic hashing function and should compare it with target hash. For both online and offline attacks, the attacker usually needs to have a password wordlist. Most of the web applications have password complexity rules where users have to use at least one number, upper/lower case letters and a special character. Also there are lot’s of precautions such as IP blocking, account freezing etc. Therefore, reducing the number of trials is very important for attackers.</summary></entry><entry><title type="html">Siber Güvenliğin Gelecek 30 Yılı İçin Kehanetler</title><link href="https://utkusen.com/blog/siber-guvenligin-gelecek-30yili-icin-kehanetler.html" rel="alternate" type="text/html" title="Siber Güvenliğin Gelecek 30 Yılı İçin Kehanetler" /><published>2019-07-26T10:39:08+03:00</published><updated>2019-07-26T10:39:08+03:00</updated><id>https://utkusen.com/blog/siber-guvenligin-gelecek-30yili-icin-kehanetler</id><content type="html" xml:base="https://utkusen.com/blog/siber-guvenligin-gelecek-30yili-icin-kehanetler.html">&lt;p&gt;&lt;em&gt;Bu yazım, Arkakapı dergisinin 5. sayısında yer almaktadır.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Geleceği tahmin etmek, her sektörde olduğu gibi siber güvenlikte de önem teşkil eder. Gelecekte siber güvenlik sektörünün nereye doğru ilerleyeceğini bilmek şirketler için kar, devletler için stratejik üstünlük anlamına gelir. Bu tip tahminlerde bulunan danışmanlık firmaları dünyada mevcut. Ancak bunların yaptığı gelecek tahminleri, 2-5 yıl gibi kısa vadeli oluyor. Biz ise bu yazıda 30-40 yıllık bir süreçte nereye doğru gidebileceğimizi hayal edeceğiz. Her beş senede bambaşka bir hale gelen teknoloji dünyasında, bu denli uzak geleceği tahmin etmek imkansız görünebilir. Ancak siber güvenlik dünyasında, insanlığın tarihsel süreçte yaşadığı olayların konsantre bir izdüşümünü görmek mümkün. Güvenlik kameralarının ve adli tıbbın olmadığı eski çağlarda suçluların tespit edilmesi çok zordu. 1800’lere gelindiğinde ise adli tıp ilerlemiş, dedektiflik yaygın bir meslek haline gelmişti. Günümüzde ise suçluların tespiti çok daha kolay hale geldi. Bu izdüşüme göre 2018 yılındaki siber güvenlik dünyası, 1800’lerin fiziksel dünyasına benziyor. 1800’lerden sonra yaşanan tarihsel süreci incelersek, siber güvenliğin önümüzdeki 30-40 yıl içinde yaşayacağı değişimleri, biraz hayal gücünün de yardımıyla tahmin edebiliriz.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Bu yazıda 2030, 2040 ve 2050 yılları civarında gerçekleşeceğini tahmin ettiğim üç ana olaya değineceğim.&lt;/p&gt;

&lt;h2 id=&quot;2030---güvenlik-sektöründe-yaşanacak-i̇şsizlik-problemi&quot;&gt;2030 - Güvenlik Sektöründe Yaşanacak İşsizlik Problemi&lt;/h2&gt;

&lt;p&gt;2000’li yılların başında web ve internet teknolojileri dünyada yeni yeni yaygınlaşıyorken, işin güvenlik tarafı insanların aklını çok kurcalamıyordu. Bu dönemde ortaya çıkan macera filmlerinde hacker temaları işlense de, günlük hayatımıza verebilecekleri zararlar bir bilim kurgu senaryosundan öteye gitmiyordu. Fakat yıllar ilerledikçe teknoloji, günlük hayatın her köşesine işledi. Dolayısıyla işin güvenlik kısmı çok kritik bir durum haline geldi. Fakat gerekli olan güvenlik elemanı sayısında hala büyük bir eksiklik var. Bu yüzden gelecek tahmini yapan kurumlar, dijitalleşme ileride daha da artacağı için, güvenlik elemanı ihtiyacının da artacağını öngörüyor. Bu tespit bana asansör operatörlerinin durumunu anımsatıyor. Asansör ilk icat edildiğinde çalışması, bir insan operatörün yardımıyla mümkün oluyordu. O dönemde asansörlerin tüm dünyada yaygınlaşacağını göz önünde bulunduran bir kişi, insan operatörlere duyulacak ihtiyacın da artacağını söyleyebilirdi. Fakat asansörlere elektronik düğme sistemlerinin gelmesiyle insana olan ihtiyaç bitmiş, bir meslek dalı yok olmuştu.&lt;/p&gt;

&lt;p&gt;2000’lerden günümüze güvenlik sektöründe çok büyük değişimler yaşandı. Güvenliğin kazandığı önem sayesinde defansif güvenlik teknolojileri çok ilerledi. Şirketler ve devletler varlıklarının güvenliğine büyük yatırımlar yapmaya başladı. Araştırmacılar açık kaynak kodlu yazılımlarda güvenlik açıklarını tespit edip kapatmaya başladı. Dolayısıyla 2008 ve 2018 yıllarını kıyasladığımızda, global güvenliğin oldukça iyiye gittiğini söyleyebiliriz. Peki bundan sonra nereye gidecek?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://utkusen.com/blog/yerli-siber-guvenlik-yazilimi-hamlesinde-gozden-kacan-detaylar.html&quot;&gt;Yerli Siber Güvenlik Yazılımı Hamlesinde Gözden Kaçan Detaylar&lt;/a&gt; yazımda, güvenlik yazılımlarının geçirdiği evreleri şöyle sıralamıştım:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Başlangıç evresi (… - 2001)&lt;/li&gt;
  &lt;li&gt;Kullanım kolaylığı evresi (2001-2009)&lt;/li&gt;
  &lt;li&gt;Olgunluk evresi (2009-…)&lt;/li&gt;
  &lt;li&gt;Yapay zeka evresi (…-…)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Şu an içinde bulunduğumuz olgunluk evresinden yapay zeka evresine ne zaman geçeceğiz, net olarak bilemiyoruz. Fakat gidişatın kesinlikle o yönde olduğunu, pek çok farklı emare ile gözlemleyebiliyoruz. Örneğin IDS, SIEM gibi defansif güvenlik ürünleri, insana ihtiyaç duymayacak şekilde çalışma noktasına varmak üzere. Ofansif tarafta henüz emekleme döneminde olsalar da, yapay zeka hacker yazılımlarının ortaya çıktığını görebiliyoruz. Şu an bu yazılımlar deneysel ve pahalı olsa da, ileride bunlar hem daha stabil hem de ucuzlamış olacak. Dolayısıyla bu yazılımlar insan bir çalışandan daha düşük maliyetli ve daha verimli olacak.&lt;/p&gt;

&lt;p&gt;Gidişatı göz önünde bulundurduğumda, bu döneme 2030 yılına kadar geçileceğini düşünüyorum. Peki bu dönem geldiğinde ne olacak? Hem defansif hem ofansif güvenliğin çok büyük bir kısmı otomatize hale gelecek. İnsana olan ihtiyaç, üstten bakan bir göz ve problem çıktığında düzeltmeyle sınırlı kalabilir. İşin siber savaş kısmında devletlerin insan personel ihtiyacı muhtemelen devam edecek ama özel sektör bu alanda makineleşmeyi tercih edecektir. 2030 yılına geldiğimizde, kendisini programlama, yapay zeka (ve alt dalları) gibi farklı disiplinlerde geliştirememiş orta ve alt seviye güvenlikçiler işsizlik ile karşılaşacaktır.&lt;/p&gt;

&lt;h2 id=&quot;2040---sanal-pasaport-ve-sanal-vize&quot;&gt;2040 - Sanal Pasaport ve Sanal Vize&lt;/h2&gt;

&lt;p&gt;Facebook ve Google gibi firmaların, bireylerin davranışlarını çerezler (cookie) ya da farklı yöntemlerle kayıt altında tuttuğu artık bilinen bir gerçek. Bu kişisel veriler sadece bu şirketler ya da ABD devleti tarafından gayrıresmi olarak kullanılsa da, gelecekte bu durumun farklı olacağını düşünüyorum. Çünkü günümüzde siber suçların durdurulamamasının en önemli sebeplerinden biri, suçluların gerçek kimliğinin tespit edilememesidir. Google gibi şirketlerin sahip olduğu kişi profilleri kimi zaman suçlu tespitine yardımcı olsa da, büyük bir çözüm sağlamıyor. Bunun yanında TOR gibi servisler de kişinin gerçek IP adresini saklamasına yardımcı oluyor.&lt;/p&gt;

&lt;p&gt;TOR ve diğer VPN servislerinin hala işe yarıyor olması, internetin herkese açık olmasının bir sonucudur. Örneğin Endonezya’da yaşayan bir insan, turkiye.gov.tr’ye girebilir, bir güvenlik açığı bulursa buraya zarar verebilir. Turkiye.gov.tr sitesinin yöneticileri “Endonezya’da yaşayan birinin bu siteye girmesine gerek yok” diye düşünüp o ülkeyi engelleyebilir, hatta Türkiye hariç tüm dünyayı engelleyebilir. Ama bu durumda yurtdışında yaşayan Türk vatandaşları siteye nasıl girecek? Ülke engelleme bu tip konularda kalıcı bir çözüm olamaz. Kalıcı çözüm ise gelecekte var olacağını düşündüğüm sanal pasaport sistemi.&lt;/p&gt;

&lt;p&gt;İnsanların anonim bir şekilde internette dolaşmasını engelleyerek siber suçları durdurmayı hedefleyen “Evilcorp” isminde bir şirket hayal edelim. İnsanlar Evilcorp şirketinin ürünü olan “elektronik pasaportu” gerçek kimlik bilgileriyle alabiliyorlar. Kişi elektronik pasaport aldıktan sonra, internette yolladığı her isteğin içinde bu pasaport bilgileri yer alacak. Evilcorp ile entegre olan websiteleri, ziyaretçilerine sanal pasaport kontrolü yapabilecek. Örneğin bazı ülke vatandaşlarını tamamen engelleyebilir, fakat bu ülkedeki bazı vatandaşlara -öğrenciler, akademisyenler vs.- giriş vizesi verebilir. O dönemin büyük bulut şirketleri Evilcorp ile entegre olacak ve internetin büyük bir bölümünde sanal pasaportsuz dolaşım mümkün olmayacak.&lt;/p&gt;

&lt;h2 id=&quot;2050---bireysel-hackingin-ve-hackerlar-çağının-bitişi&quot;&gt;2050 - Bireysel Hacking’in ve Hacker’lar Çağının Bitişi&lt;/h2&gt;

&lt;p&gt;Tarih boyunca insanlık, farklı suç trendlerine ve gruplarına maruz kalmıştır ve bunlarla mücadele yöntemleri geliştirmiştir. Buna örnek olarak deniz korsanlığını verebiliriz. MÖ 14. Yüzyıldan başlayan korsanlık tarihi 1800’lere kadar sürmüştür. Çeşitli kültürlerde hackerlara korsan benzetmesi yapılır. Örneğin ülkemizde “hacker” kelimesinin TDK karşılığı “bilgisayar korsanı”dır. Bu benzetme mantıksız değildir. İnterneti okyanusa, bilgisayarları gemilere ve hackerları korsanlara benzetebiliriz. Peki asırlarca süren korsanlık geleneği 1800’lerde nasıl bitirildi? Okuduklarıma göre burada etkili olan iki konu var: Birincisi, İngiliz donanmasının denizlerde yaptığı devriyelerin sayıca çok artması ve bu devriyelerin silah gücünün korsanlardan fazla olması. İkincisi, korsanların ticaret yaptığı limanların devletler tarafından kapatılması. Gelir yollarının kesilmesi ve baskıların artmasıyla korsanlar, bu kadim suç geleneğini terk etmek zorunda kalmıştır. Bitmez denen deniz korsanlığı tarihe karışmıştır.&lt;/p&gt;

&lt;p&gt;Tabi ki hackerların tek motivasyonu maddi kazanç değil. Bu yüzden korsanlar gibi kazanç yolları kesilse bile hacking faaliyetleri bitmeyecektir. Fakat buna rağmen gelecekte hackingi bitirecek iki temel konu var. Birincisi önceki başlıkta bahsettiğimiz sanal pasaportlar ile her internet kullanıcısının nerede ne yaptığı kayıt altında olacağı için hacking, büyük cesaret isteyen bir suç haline gelecektir. Bugün bir insanı öldürüp yakalanmamak ne kadar zorsa, gelecekte hacking de böyle olacaktır. Bunun yanında 2000’lerden günümüze baktığımızda defansif güvenlik teknolojilerinin çok güç kazandığını görüyoruz. Bu durum muhtemelen böyle devam edecektir ve gelecekte bir sistemin hacklenmesi, sadece çok büyük aktörlerin yapabileceği bir şey haline gelecektir.&lt;/p&gt;

&lt;p&gt;Sonuç olarak hacking faaliyetleri askeri ve istihbari bir yöntem olmakla sınırlı kalacak, bireysel hacking tarihe karışacaktır. Hacking kültürü muhtemelen bu kadar kısa sürede bitmeyecektir. Ancak bireylere inmeyen faaliyetlerin, bir kültür olarak uzun süre devam etmesi de mümkün gözükmüyor. Bundan 200 yıl sonra tarihçiler hackerları yazarken 1980-2050 arasında faaliyet gösteren insanlar olarak niteleyecek, dönemin gençleri kostüm partilerine önünde hacker amblemleri olan siyah kapüşonlularla katılacaktır.&lt;/p&gt;</content><author><name></name></author><category term="Kehabet" /><summary type="html">Bu yazım, Arkakapı dergisinin 5. sayısında yer almaktadır. Geleceği tahmin etmek, her sektörde olduğu gibi siber güvenlikte de önem teşkil eder. Gelecekte siber güvenlik sektörünün nereye doğru ilerleyeceğini bilmek şirketler için kar, devletler için stratejik üstünlük anlamına gelir. Bu tip tahminlerde bulunan danışmanlık firmaları dünyada mevcut. Ancak bunların yaptığı gelecek tahminleri, 2-5 yıl gibi kısa vadeli oluyor. Biz ise bu yazıda 30-40 yıllık bir süreçte nereye doğru gidebileceğimizi hayal edeceğiz. Her beş senede bambaşka bir hale gelen teknoloji dünyasında, bu denli uzak geleceği tahmin etmek imkansız görünebilir. Ancak siber güvenlik dünyasında, insanlığın tarihsel süreçte yaşadığı olayların konsantre bir izdüşümünü görmek mümkün. Güvenlik kameralarının ve adli tıbbın olmadığı eski çağlarda suçluların tespit edilmesi çok zordu. 1800’lere gelindiğinde ise adli tıp ilerlemiş, dedektiflik yaygın bir meslek haline gelmişti. Günümüzde ise suçluların tespiti çok daha kolay hale geldi. Bu izdüşüme göre 2018 yılındaki siber güvenlik dünyası, 1800’lerin fiziksel dünyasına benziyor. 1800’lerden sonra yaşanan tarihsel süreci incelersek, siber güvenliğin önümüzdeki 30-40 yıl içinde yaşayacağı değişimleri, biraz hayal gücünün de yardımıyla tahmin edebiliriz.</summary></entry></feed>