diff options
| author | GeorgeFI | 2023-06-25 18:24:27 +0200 |
|---|---|---|
| committer | GeorgeFI | 2023-06-25 18:24:27 +0200 |
| commit | 76cb4c15577cc0285d3a3593a85df340a6b8bfeb (patch) | |
| tree | b84b99b0797715d5529e9939a2ca04e89bb04ce5 /notebooks/fips | |
| parent | 25688c8bbdf2d7580b3fc76a90f6eabc410aee0a (diff) | |
| download | sec-certs-76cb4c15577cc0285d3a3593a85df340a6b8bfeb.tar.gz sec-certs-76cb4c15577cc0285d3a3593a85df340a6b8bfeb.tar.zst sec-certs-76cb4c15577cc0285d3a3593a85df340a6b8bfeb.zip | |
feat: EDA on cpes/cve matches
Diffstat (limited to 'notebooks/fips')
| -rw-r--r-- | notebooks/fips/references.ipynb | 1008 |
1 files changed, 970 insertions, 38 deletions
diff --git a/notebooks/fips/references.ipynb b/notebooks/fips/references.ipynb index 9f443704..a2c35fce 100644 --- a/notebooks/fips/references.ipynb +++ b/notebooks/fips/references.ipynb @@ -53,18 +53,23 @@ }, { "cell_type": "code", - "execution_count": 59, - "id": "614850e2", + "execution_count": 129, + "id": "bbf7126f", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", + "import numpy as np\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "\n", "from sec_certs.dataset.fips import FIPSDataset\n", "from collections import Counter\n", "\n", + "# Typing imports\n", + "from pandas.core.frame import DataFrame\n", + "\n", + "\n", "sns.set_palette(\"deep\")" ] }, @@ -391,7 +396,7 @@ }, { "cell_type": "markdown", - "id": "72142ff5", + "id": "553f0f48", "metadata": {}, "source": [ "## Exploratory Data Analysis" @@ -418,7 +423,7 @@ { "cell_type": "code", "execution_count": 8, - "id": "1c1e7211", + "id": "e0c6b7c6", "metadata": { "scrolled": true }, @@ -445,7 +450,7 @@ }, { "cell_type": "markdown", - "id": "53c2bcde", + "id": "fca69682", "metadata": {}, "source": [ "### Status distribution of certificates" @@ -454,7 +459,7 @@ { "cell_type": "code", "execution_count": 32, - "id": "006e436e", + "id": "7612dd81", "metadata": { "scrolled": false }, @@ -479,7 +484,7 @@ }, { "cell_type": "markdown", - "id": "0b553d83", + "id": "d70c48c4", "metadata": {}, "source": [ "### Type distribution of certificates" @@ -488,7 +493,7 @@ { "cell_type": "code", "execution_count": 31, - "id": "382867bb", + "id": "764da4c9", "metadata": { "scrolled": false }, @@ -514,7 +519,7 @@ }, { "cell_type": "markdown", - "id": "7f365a8d", + "id": "aaa67c59", "metadata": {}, "source": [ "### Standard distribution of certificates" @@ -523,7 +528,7 @@ { "cell_type": "code", "execution_count": 41, - "id": "b9992b31", + "id": "d9b2543f", "metadata": { "scrolled": true }, @@ -547,7 +552,7 @@ }, { "cell_type": "markdown", - "id": "1bfce80f", + "id": "34006548", "metadata": {}, "source": [ "### Distribution of embodiment in the dataset" @@ -556,7 +561,7 @@ { "cell_type": "code", "execution_count": 44, - "id": "21e0709f", + "id": "e0a85bbd", "metadata": { "scrolled": false }, @@ -581,16 +586,941 @@ }, { "cell_type": "markdown", - "id": "56e5bb3f", + "id": "c78fbae8", + "metadata": {}, + "source": [ + "### Twenty most common CPEs in the dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "id": "4a756341", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of certificates with at least one CPE match: 464\n" + ] + } + ], + "source": [ + "cpe_certs_df: DataFrame = df[df[\"cpe_matches\"].notna()]\n", + "\n", + "print(f\"Number of certificates with at least one CPE match: {cpe_certs_df.shape[0]}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "id": "4ef527f2", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[('cpe:2.3:o:redhat:enterprise_linux:8.5.0:*:*:*:*:*:*:*', 19),\n", + " ('cpe:2.3:o:redhat:enterprise_linux:8.0:*:*:*:-:*:*:*', 19),\n", + " ('cpe:2.3:o:redhat:enterprise_linux:8.4:*:*:*:*:*:*:*', 19),\n", + " ('cpe:2.3:o:redhat:enterprise_linux:8.0:*:*:*:*:*:*:*', 19),\n", + " ('cpe:2.3:o:redhat:linux:8.0:*:*:*:*:*:*:*', 19),\n", + " ('cpe:2.3:o:redhat:enterprise_linux:8.6:*:*:*:*:*:*:*', 19),\n", + " ('cpe:2.3:o:redhat:enterprise_linux:8.1:*:*:*:*:*:*:*', 19),\n", + " ('cpe:2.3:o:oracle:linux:7:-:*:*:*:*:*:*', 19),\n", + " ('cpe:2.3:o:oracle:linux:7:1:*:*:*:*:*:*', 19),\n", + " ('cpe:2.3:o:oracle:linux:7:3:*:*:*:*:*:*', 19),\n", + " ('cpe:2.3:o:oracle:linux:7:0:*:*:*:*:*:*', 19),\n", + " ('cpe:2.3:o:oracle:linux:7:2:*:*:*:*:*:*', 19),\n", + " ('cpe:2.3:h:cisco:catalyst_6506-e:-:*:*:*:*:*:*:*', 15),\n", + " ('cpe:2.3:h:cisco:catalyst_6509-e:-:*:*:*:*:*:*:*', 15),\n", + " ('cpe:2.3:a:mcafee:network_security_platform:9.1:*:*:*:*:*:*:*', 12),\n", + " ('cpe:2.3:h:juniper:mx960:-:*:*:*:*:*:*:*', 11),\n", + " ('cpe:2.3:h:juniper:mx480:-:*:*:*:*:*:*:*', 11),\n", + " ('cpe:2.3:h:juniper:mx240:-:*:*:*:*:*:*:*', 11),\n", + " ('cpe:2.3:o:amazon:linux_2:-:*:*:*:*:*:*:*', 9),\n", + " ('cpe:2.3:o:oracle:solaris:-:*:*:*:*:*:x64:*', 8)]" + ] + }, + "execution_count": 105, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cpe_counter = Counter()\n", + "cpe_matches_per_cert: list[int] = []\n", + "\n", + "for cpes in cpe_certs_df[\"cpe_matches\"]:\n", + " cpe_counter.update(cpes)\n", + " cpe_matches_per_cert.append(len(cpes))\n", + "\n", + "cpe_counter.most_common(20)" + ] + }, + { + "cell_type": "markdown", + "id": "8621fa2e", + "metadata": {}, + "source": [ + "### CPE matches data extraction" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "id": "bb0569df", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Boxplot of total cpe matches per certificate')" + ] + }, + "execution_count": 128, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGgCAYAAAAKKQXsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA130lEQVR4nO3deXxTVf7/8Xe6pYU2KYXSghRkFRhHUdbKomC1IqBIgcFxYVMUAQfQQaujIF8HRhgFRQF1lCoOX0dwG8aRrSr+1MrmMCMiiMhSLC2bTQrYFNrz+8NvM4S20JTmhpbX8/G4D8g5N/d+etI079zce2IzxhgBAABYJCTYBQAAgAsL4QMAAFiK8AEAACxF+AAAAJYifAAAAEsRPgAAgKUIHwAAwFKEDwAAYCnCBwAAsBThA9XKZrNp2rRpwS7Dx4YNG3TVVVepbt26stls2rx5c7BLOqPzcQxrg927d8tms+nPf/5zsEvB/xkxYoQuvvhin7ajR4/qrrvuUmJiomw2myZOnOh97DIyMoJSJ6of4aOGyMjIkM1m81kaNmyo3r1768MPPwx2eeds69atmjZtmnbv3l2t2z1x4oSGDBmiI0eOaM6cOVq8eLGaNWsWsBqWLFmiuXPnVvn+ODPGt+bJycnRtGnTKh36Z8yYoYyMDI0dO1aLFy/WHXfcEdgCFbi/P6hYWLALgH+mT5+u5s2byxijvLw8ZWRk6MYbb9Ty5cvVv3//YJdXZVu3btUTTzyha665psw7oXOxc+dO7dmzRy+//LLuuuuugNewZMkSbdmyRRMnTqzS/XFmjG/Nk5OToyeeeEIXX3yxOnTo4NP38ssvq6SkxKfto48+Urdu3TR16lRvmzFGP//8s8LDwwNSY6D+/qBihI8apm/fvurUqZP39ujRo5WQkKD//d//rdHhI1AOHDggSYqNjQ1uIUAQHDt2THXr1g3Kvk+ePFkmWJyuvDBx4MABtW/f3qfNZrMpMjKyWutDkBnUCIsWLTKSzIYNG3zaS0pKjMPhMHfeeadP+9GjR83kyZNNkyZNTEREhGnTpo2ZPXu2KSkpMcYYc/z4cXPJJZeYSy65xBw/ftx7v8OHD5vExESTnJxsTp48aYwxZvjw4aZu3bpm586d5vrrrzd16tQxjRo1Mk888YR3e6UkmalTp/q0ffXVV+aGG24wMTExpm7duqZPnz4mKyurzM92+vLxxx+fcUwyMzNNjx49TJ06dYzT6TQ33XST2bp1q7d/+PDhZbZ59dVXn3F8z1TDCy+8YNq3b28iIiJMo0aNzH333Wd++uknb//VV19d5v7NmjUzxhjj8XjMY489Zq688krjcDhMnTp1TI8ePcxHH31UppbyxrA8P//8s5k6dapp3bq1sdvtJjEx0dxyyy3m+++/N8YYs2vXLiPJzJ492zzzzDOmadOmJjIy0vTq1ct8/fXXZbb37bffmrS0NFOvXj1jt9tNx44dzfvvv3/WOk7dz/PPP2+aN29uoqKizHXXXWf27t1rSkpKzPTp081FF11kIiMjzU033WQOHz7ss4333nvP3HjjjaZRo0YmIiLCtGjRwkyfPt37O3i28fV3PF588UXTokULExERYTp16mTWr19fpfEoKioy06ZNM61atTJ2u93ExcWZ7t27m1WrVp1xzEp/39auXWvGjBlj4uLiTExMjLnjjjvMkSNHyqz/z3/+0/u7Hh0dbW688UazZcsWn3VKn6fff/+96du3r4mOjjY333zzGevYt2+fGTVqlHfcL774YnPvvfcaj8fjXeenn34yv/vd77x/S1q2bGn+9Kc/meLiYu86p47tnDlzTIsWLUxISIiZM2dOuc+rRYsWeWsufQw//vjjctfdtWuXd/ul9zv1MRoyZIhp0KCBiYyMNG3atDGPPPKIt3/37t1m7Nixpk2bNiYyMtLExcWZwYMHm127dpV5LM703K/M+MM/HPmoYVwulw4dOiRjjA4cOKB58+bp6NGjuv32273rGGN000036eOPP9bo0aPVoUMHrVy5Ur///e/1448/as6cOYqKitJrr72m7t2769FHH9UzzzwjSRo3bpxcLpcyMjIUGhrq3WZxcbFuuOEGdevWTbNmzdKKFSs0depUnTx5UtOnT6+w3m+++UY9e/aUw+HQlClTFB4erhdffFHXXHON1q5dq65du6pXr166//779dxzz+mRRx5Ru3btJMn7b3nWrFmjvn37qkWLFpo2bZp+/vlnzZs3T927d9dXX32liy++WPfcc48uuugizZgxQ/fff786d+6shISEcrd3thqmTZumJ554QikpKRo7dqy2b9+uBQsWaMOGDfr8888VHh6uRx99VC6XS/v27dOcOXMkSdHR0ZIkt9utv/zlL7r11lt19913q6CgQK+88opSU1O1fv36Moejz6a4uFj9+/dXZmamhg0bpt/97ncqKCjQ6tWrtWXLFrVs2dK77uuvv66CggKNGzdOhYWFevbZZ9WnTx99/fXX3vH45ptv1L17d1100UV6+OGHVbduXb311lsaOHCg3n77bd1yyy1nremvf/2rioqKNGHCBB05ckSzZs3S0KFD1adPH33yySd66KGH9P3332vevHl68MEH9eqrr3rvm5GRoejoaE2ePFnR0dH66KOP9Pjjj8vtdmv27NmSdMbx9Wc8lixZooKCAt1zzz2y2WyaNWuWBg0apB9++MH7Tryy4zFt2jTNnDlTd911l7p06SK3262NGzfqq6++0nXXXXfWMRs/frxiY2M1bdo07+/Unj179Mknn8hms0mSFi9erOHDhys1NVVPPfWUjh8/rgULFqhHjx7617/+5fMxwcmTJ5WamqoePXroz3/+s+rUqVPhvnNyctSlSxfl5+drzJgxatu2rX788UctW7ZMx48fV0REhI4fP66rr75aP/74o+655x41bdpUX3zxhdLT07V///4y598sWrRIhYWFGjNmjOx2u2655RYVFBTo8ccf15gxY9SzZ09J0lVXXVWmnnbt2mnx4sWaNGmSmjRpogceeECSFB8fr4MHD5ZZ/z//+Y969uyp8PBwjRkzRhdffLF27typ5cuX649//KOkX042/+KLLzRs2DA1adJEu3fv1oIFC3TNNddo69atqlOnzlmf+/6MP/wQ7PSDyqkondvtdpORkeGz7nvvvWckmSeffNKnffDgwcZms3nfCRpjTHp6ugkJCTGffvqpWbp0qZFk5s6d63O/0iMIEyZM8LaVlJSYfv36mYiICHPw4EFvu0571z5w4EATERFhdu7c6W3LyckxMTExplevXt620n2f7WhHqQ4dOpiGDRv6vIP+97//bUJCQnyOApW+m1q6dOlZt1lRDQcOHDARERHm+uuv93m39/zzzxtJ5tVXX/W29evXz+fdeKmTJ0/6vJs05pd3lAkJCWbUqFE+7aePYXleffVVI8k888wzZfpKj0aVvluMiooy+/bt8/avW7fOSDKTJk3ytl177bXm17/+tSksLPTZzlVXXWVat259xlpK9xMfH2/y8/O97enp6UaSufzyy82JEye87bfeequJiIjw2depR99K3XPPPaZOnTo+61U0vv6MR/369X2OLrz//vtGklm+fLnf43H55Zebfv36VTg2FSl9Pnfs2NEUFRV522fNmmUkeY+wFBQUmNjYWHP33Xf73D83N9c4nU6f9tLn6cMPP1ypGu68804TEhJS5miqMf8ds//5n/8xdevWNd99951P/8MPP2xCQ0PN3r17jTH/HVuHw2EOHDjgs+6GDRvKPWpRWvPpj2ezZs3KjGl5Rz569eplYmJizJ49e8qt3Zjyf6+ysrKMJPP666972yp67vsz/vAPV7vUMC+88IJWr16t1atX64033lDv3r1111136Z133vGu889//lOhoaG6//77fe77wAMPyBjjc3XMtGnT9Ktf/UrDhw/Xfffdp6uvvrrM/UqNHz/e+3+bzabx48erqKhIa9asKXf94uJirVq1SgMHDlSLFi287Y0aNdJvf/tbffbZZ3K73X6Pwf79+7V582aNGDFCcXFx3vbLLrtM1113nf75z3/6vc0zWbNmjYqKijRx4kSFhPz3KXP33XfL4XDogw8+OOs2QkNDFRERIUkqKSnRkSNHdPLkSXXq1ElfffWV3zW9/fbbatCggSZMmFCmr/Qdc6mBAwfqoosu8t7u0qWLunbt6h2nI0eO6KOPPtLQoUNVUFCgQ4cO6dChQzp8+LBSU1O1Y8cO/fjjj2etaciQIXI6nd7bXbt2lSTdfvvtCgsL82kvKiry2WZUVJT3/6U19OzZU8ePH9e2bdvOum9/xuM3v/mN6tWr571d+m78hx9+kOTfeMTGxuqbb77Rjh07zlpjecaMGeNz3sPYsWMVFhbmfWxWr16t/Px83Xrrrd46Dh06pNDQUHXt2lUff/xxmW2OHTv2rPstKSnRe++9pwEDBvicQ1aqdMyWLl2qnj17ql69ej77T0lJUXFxsT799FOf+6WlpSk+Pt6vMaiKgwcP6tNPP9WoUaPUtGnTcmuXfH+vTpw4ocOHD6tVq1aKjY2t1POuKuOPyuFjlxqmS5cuPn8sbr31Vl1xxRUaP368+vfvr4iICO3Zs0eNGzdWTEyMz31LDyPu2bPH2xYREaFXX31VnTt3VmRkpBYtWlTmj7UkhYSE+AQISWrTpo0kVXh52sGDB3X8+HFdcsklZfratWunkpISZWdn61e/+lXlfvj/U1p/RdtduXJltZ5oV9H+IiIi1KJFC5/xPJPXXntNTz/9tLZt26YTJ05425s3b+53TTt37tQll1zi86JekdatW5dpa9Omjd566y1J0vfffy9jjB577DE99thj5W7jwIEDPgGmPKe/CJQGkaSkpHLbf/rpJ2/bN998oz/84Q/66KOPygRSl8t1xv1K/o3H6XWWBpHSevwZj+nTp+vmm29WmzZtdOmll+qGG27QHXfcocsuu+ysdUhlH5vo6Gg1atTI+5wqDTV9+vQp9/4Oh8PndlhYmJo0aXLW/R48eFBut1uXXnrpGdfbsWOH/vOf/1QYKEpP6C5Vld/lqigNimer/+eff9bMmTO1aNEi/fjjjzLGePsq83vl7/ij8ggfNVxISIh69+6tZ599Vjt27PD7hVySVq5cKUkqLCzUjh07LPsDciF54403NGLECA0cOFC///3v1bBhQ4WGhmrmzJnauXNnUGsrvSLhwQcfVGpqarnrtGrV6qzbOfUcocq0l74Q5Ofn6+qrr5bD4dD06dPVsmVLRUZG6quvvtJDDz101ism/HW2evwZj169emnnzp16//33tWrVKv3lL3/RnDlztHDhwrNe2l0ZpbUsXrxYiYmJZfpPD1t2u93n6Fx17P+6667TlClTyu0vfQNS6tQjDeeDCRMmaNGiRZo4caKSk5PldDpls9k0bNiwSv1e+Tv+qDxGrhY4efKkpF9mBpSkZs2aac2aNSooKPA5+lF6+PrUSbb+85//aPr06Ro5cqQ2b96su+66S19//bXP4XPplyfhDz/84PPH5rvvvpOkCk+4io+PV506dbR9+/Yyfdu2bVNISIj3XXF5R1sqUlp/Rdtt0KBBlY56VFTDqfs79ehPUVGRdu3apZSUlLNuY9myZWrRooXeeecdn3VOncvAHy1bttS6det04sSJs859UN5HAt999533cSv9mcLDw31+Fqt88sknOnz4sN555x316tXL275r164y61Y0vv6Mx9n4Ox5xcXEaOXKkRo4cqaNHj6pXr16aNm1apcLHjh071Lt3b+/to0ePav/+/brxxhslyXuibMOGDav1sYmPj5fD4dCWLVvOuF7Lli119OjRc9q3P8/tyip9jM5W/7JlyzR8+HA9/fTT3rbCwkLl5+dXqsZAjT+Y4bTGO3HihFatWqWIiAjvxyo33nijiouL9fzzz/usO2fOHNlsNvXt29d73xEjRqhx48Z69tlnlZGRoby8PE2aNKncfZ26PWOMnn/+eYWH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AFiK8AEAACxF+AAAAJYifAAAAEsRPgAAgKUIHwAAwFKEDwAAYCnCBwAAsBThAwAAWIrwAQAALEX4AAAAliJ8AAAASxE+AACApQgfAADAUoQPAABgKcIHAACwFOEDAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBShA8AAGApv8PHjz/+qNtvv13169dXVFSUfv3rX2vjxo3efmOMHn/8cTVq1EhRUVFKSUnRjh07qrVoAABQc/kVPn766Sd1795d4eHh+vDDD7V161Y9/fTTqlevnnedWbNm6bnnntPChQu1bt061a1bV6mpqSosLKz24gEAQM1jM8aYyq788MMP6/PPP9f/+3//r9x+Y4waN26sBx54QA8++KAkyeVyKSEhQRkZGRo2bNhZ9+F2u+V0OuVyueRwOCpbGgAACCJ/Xr/9OvLx97//XZ06ddKQIUPUsGFDXXHFFXr55Ze9/bt27VJubq5SUlK8bU6nU127dlVWVla52/R4PHK73T4LAACovfwKHz/88IMWLFig1q1ba+XKlRo7dqzuv/9+vfbaa5Kk3NxcSVJCQoLP/RISErx9p5s5c6acTqd3SUpKqsrPAQAAagi/wkdJSYmuvPJKzZgxQ1dccYXGjBmju+++WwsXLqxyAenp6XK5XN4lOzu7ytsCAADnP7/CR6NGjdS+fXuftnbt2mnv3r2SpMTERElSXl6ezzp5eXnevtPZ7XY5HA6fBQAA1F5+hY/u3btr+/btPm3fffedmjVrJklq3ry5EhMTlZmZ6e13u91at26dkpOTq6FcAABQ04X5s/KkSZN01VVXacaMGRo6dKjWr1+vl156SS+99JIkyWazaeLEiXryySfVunVrNW/eXI899pgaN26sgQMHBqJ+ADXIiBEjdPjwYdWvX18ZGRnBLgdAkPgVPjp37qx3331X6enpmj59upo3b665c+fqtttu864zZcoUHTt2TGPGjFF+fr569OihFStWKDIystqLB1BzfPvttzp8+LAk6fDhw/r222/Vrl27IFcFIBj8mufDCszzAdRON910k079c2Oz2fT3v/89iBUBqE4Bm+cDAKpi3rx5Ov19jjFG8+bNC1JFAIKJ8AEgoIqKirRq1apy+1atWqWioiKLKwIQbIQPAAE1d+7cc+oHUPsQPgAE1MSJE8+pH0DtQ/gAEFARERG6/vrry+1LTU1VRESExRUBCDbCB4CAmzBhgmw2m0+bzWbT+PHjg1QRgGAifACwxFNPPXXG2wAuHIQPAJZo166d6tevL0mqX78+E4wBFzC/ZjgFgHPBlOoAJI58AAAAixE+AACApQgfAADAUoQPAABgKcIHAACwFOEDAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBShA8AAGApwgcAALAU4QMAAFiK8AEAACxF+AAAAJYifAAAAEsRPgAAgKUIHwAAwFKEDwAAYCnCBwDLvPHGG7r55pv1xhtvBLsUAEFE+ABgCZfLpbfeekslJSV666235HK5gl0SgCAhfACwxIwZM2SMkSQZYzRjxowgVwQgWAgfAAJu8+bN2rp1q0/b1q1btXnz5uAUBCCoCB8AAqqkpESzZs0qt2/WrFkqKSmxuCIAwUb4ABBQGzduVEFBQbl9BQUF2rhxo8UVAQg2v8LHtGnTZLPZfJa2bdt6+wsLCzVu3DjVr19f0dHRSktLU15eXrUXDaDm6NSpk2JiYsrtczgc6tSpk8UVAQg2v498/OpXv9L+/fu9y2effebtmzRpkpYvX66lS5dq7dq1ysnJ0aBBg6q1YAA1S0hIiKZMmVJu35QpUxQSwgFY4EIT5vcdwsKUmJhYpt3lcumVV17RkiVL1KdPH0nSokWL1K5dO3355Zfq1q3buVcLoEbq0KGD2rdv73PSafv27XX55ZcHsSoAweL3W44dO3aocePGatGihW677Tbt3btXkrRp0yadOHFCKSkp3nXbtm2rpk2bKisrq8LteTweud1unwVA7fPII4/IZrNJ+uVoyCOPPBLkigAEi1/ho2vXrsrIyNCKFSu0YMEC7dq1Sz179lRBQYFyc3MVERGh2NhYn/skJCQoNze3wm3OnDlTTqfTuyQlJVXpBwFwfnM6nRo6dKhCQkI0ZMgQOZ3OYJcEIEhspnTWnyrIz89Xs2bN9MwzzygqKkojR46Ux+PxWadLly7q3bu3nnrqqXK34fF4fO7jdruVlJQkl8slh8NR1dIAAICF3G63nE5npV6/z+lMr9jYWLVp00bff/+9EhMTVVRUpPz8fJ918vLyyj1HpJTdbpfD4fBZAABA7XVO4ePo0aPauXOnGjVqpI4dOyo8PFyZmZne/u3bt2vv3r1KTk4+50IBAEDt4NfVLg8++KAGDBigZs2aKScnR1OnTlVoaKhuvfVWOZ1OjR49WpMnT1ZcXJwcDocmTJig5ORkrnQBAABefoWPffv26dZbb9Xhw4cVHx+vHj166Msvv1R8fLwkac6cOQoJCVFaWpo8Ho9SU1M1f/78gBQOAABqpnM64TQQ/DlhBQAAnB8sO+EUAADAX4QPAABgKcIHAACwFOEDAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBShA8AAGApwgcAALAU4QMAAFiK8AEAACxF+AAAAJYifAAAAEsRPgAAgKUIHwAAwFKEDwAAYCnCBwAAsBThAwAAWIrwAQAALEX4AAAAliJ8AAAASxE+AACApQgfAADAUoQPAABgKcIHAACwFOEDAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBShA8AAGApwgcAALDUOYWPP/3pT7LZbJo4caK3rbCwUOPGjVP9+vUVHR2ttLQ05eXlnWudAACglqhy+NiwYYNefPFFXXbZZT7tkyZN0vLly7V06VKtXbtWOTk5GjRo0DkXCgAAaocqhY+jR4/qtttu08svv6x69ep5210ul1555RU988wz6tOnjzp27KhFixbpiy++0JdfflltRQMAgJqrSuFj3Lhx6tevn1JSUnzaN23apBMnTvi0t23bVk2bNlVWVla52/J4PHK73T4LAACovcL8vcObb76pr776Shs2bCjTl5ubq4iICMXGxvq0JyQkKDc3t9ztzZw5U0888YS/ZQAAgBrKryMf2dnZ+t3vfqe//vWvioyMrJYC0tPT5XK5vEt2dna1bBcAAJyf/AofmzZt0oEDB3TllVcqLCxMYWFhWrt2rZ577jmFhYUpISFBRUVFys/P97lfXl6eEhMTy92m3W6Xw+HwWQAAQO3l18cu1157rb7++muftpEjR6pt27Z66KGHlJSUpPDwcGVmZiotLU2StH37du3du1fJycnVVzUAAKix/AofMTExuvTSS33a6tatq/r163vbR48ercmTJysuLk4Oh0MTJkxQcnKyunXrVn1VAwCAGsvvE07PZs6cOQoJCVFaWpo8Ho9SU1M1f/786t4NAACooWzGGBPsIk7ldrvldDrlcrk4/wMAgBrCn9dvvtsFAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBShA8AAGApwgcAALAU4QMAAFiK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\n", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Boxplot\n", + "sns.boxplot(y=cpe_matches_per_cert)\n", + "plt.title(\"Boxplot of total cpe matches per certificate\")" + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "id": "820b613f", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Maximum cpe_matches: 74\n", + "Minimum cpe_matches: 1\n", + "Mean cpe_matches: 4.9375\n", + "Median cpe_matches: 2.0\n", + "First quartile: 1.0\n", + "Third quartile: 5.0\n", + "IQR: 4.0\n" + ] + } + ], + "source": [ + "# NOTE: We are calculating over \"cpe_matches\", since every cert has \"verified_cpe_matches\" equal to NaN\n", + "maximum_cpe_matches: int = max(cpe_matches_per_cert)\n", + "minimum_cpe_matches: int = min(cpe_matches_per_cert)\n", + "mean_cpe_matches: int = np.mean(cpe_matches_per_cert)\n", + "median_cpe_matches: int = np.median(cpe_matches_per_cert)\n", + "quantile_25 = np.percentile(cpe_matches_per_cert, 25)\n", + "quantile_75 = np.percentile(cpe_matches_per_cert, 75)\n", + "iqr = quantile_75 - quantile_25\n", + "\n", + "print(f\"Maximum cpe_matches: {maximum_cpe_matches}\")\n", + "print(f\"Minimum cpe_matches: {minimum_cpe_matches}\")\n", + "print(f\"Mean cpe_matches: {mean_cpe_matches}\")\n", + "print(f\"Median cpe_matches: {median_cpe_matches}\")\n", + "print(f\"First quartile: {quantile_25}\")\n", + "print(f\"Third quartile: {quantile_75}\")\n", + "print(f\"IQR: {iqr}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "id": "7ae78e42", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>cert_id</th>\n", + " <th>name</th>\n", + " <th>status</th>\n", + " <th>standard</th>\n", + " <th>type</th>\n", + " <th>level</th>\n", + " <th>embodiment</th>\n", + " <th>date_validation</th>\n", + " <th>date_sunset</th>\n", + " <th>algorithms</th>\n", + " <th>...</th>\n", + " <th>related_cves</th>\n", + " <th>module_directly_referenced_by</th>\n", + " <th>module_indirectly_referenced_by</th>\n", + " <th>module_directly_referencing</th>\n", + " <th>module_indirectly_referencing</th>\n", + " <th>policy_directly_referenced_by</th>\n", + " <th>policy_indirectly_referenced_by</th>\n", + " <th>policy_directly_referencing</th>\n", + " <th>policy_indirectly_referencing</th>\n", + " <th>year_from</th>\n", + " </tr>\n", + " <tr>\n", + " <th>dgst</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>fe50b64954720ccb</th>\n", + " <td>990</td>\n", + " <td>Windows XP Enhanced DSS and Diffie-Hellman Cry...</td>\n", + " <td>historical</td>\n", + " <td>FIPS 140-2</td>\n", + " <td>Software</td>\n", + " <td>1.0</td>\n", + " <td>Multi-Chip Stand Alone</td>\n", + " <td>2008-07-24</td>\n", + " <td>NaT</td>\n", + " <td>{SHS#784, Triple-DES#676, DSA#292, RNG#448, Tr...</td>\n", + " <td>...</td>\n", + " <td>{CVE-2004-0116, CVE-2007-1492, CVE-2011-1985, ...</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>2008</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6af1f692e9496c6d</th>\n", + " <td>240</td>\n", + " <td>DSS/Diffie-Hellman Enhanced Cryptographic Prov...</td>\n", + " <td>historical</td>\n", + " <td>FIPS 140-1</td>\n", + " <td>Software</td>\n", + " <td>1.0</td>\n", + " <td>Multi-Chip Stand Alone</td>\n", + " <td>2002-08-01</td>\n", + " <td>NaT</td>\n", + " <td>{DSA/SHA-1#29, Triple-DES#16}</td>\n", + " <td>...</td>\n", + " <td>{CVE-2004-0116, CVE-2007-1492, CVE-2011-1985, ...</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>{433}</td>\n", + " <td>{433}</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>2002</td>\n", + " </tr>\n", + " <tr>\n", + " <th>749fc650cacb0f06</th>\n", + " <td>241</td>\n", + " <td>Kernel Mode Cryptographic Module for Windows XP</td>\n", + " <td>historical</td>\n", + " <td>FIPS 140-1</td>\n", + " <td>Software</td>\n", + " <td>1.0</td>\n", + " <td>Multi-Chip Stand Alone</td>\n", + " <td>2002-08-01</td>\n", + " <td>NaT</td>\n", + " <td>{DSA/SHA-1#35, HMAC-SHA-1#35, Triple-DES#16}</td>\n", + " <td>...</td>\n", + " <td>{CVE-2004-0116, CVE-2007-1492, CVE-2011-1985, ...</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>{106}</td>\n", + " <td>{106}</td>\n", + " <td>2002</td>\n", + " </tr>\n", + " <tr>\n", + " <th>926a7fc32c08e491</th>\n", + " <td>989</td>\n", + " <td>Windows XP Enhanced Cryptographic Provider (RS...</td>\n", + " <td>historical</td>\n", + " <td>FIPS 140-2</td>\n", + " <td>Software</td>\n", + " <td>1.0</td>\n", + " <td>Multi-Chip Stand Alone</td>\n", + " <td>2008-07-24</td>\n", + " <td>NaT</td>\n", + " <td>{RSA#371, HMAC#428, Triple-DES#675, Triple-DES...</td>\n", + " <td>...</td>\n", + " <td>{CVE-2004-0116, CVE-2007-1492, CVE-2011-1985, ...</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>{2009}</td>\n", + " <td>{2009}</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>2008</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>4 rows × 23 columns</p>\n", + "</div>" + ], + "text/plain": [ + " cert_id name \\\n", + "dgst \n", + "fe50b64954720ccb 990 Windows XP Enhanced DSS and Diffie-Hellman Cry... \n", + "6af1f692e9496c6d 240 DSS/Diffie-Hellman Enhanced Cryptographic Prov... \n", + "749fc650cacb0f06 241 Kernel Mode Cryptographic Module for Windows XP \n", + "926a7fc32c08e491 989 Windows XP Enhanced Cryptographic Provider (RS... \n", + "\n", + " status standard type level \\\n", + "dgst \n", + "fe50b64954720ccb historical FIPS 140-2 Software 1.0 \n", + "6af1f692e9496c6d historical FIPS 140-1 Software 1.0 \n", + "749fc650cacb0f06 historical FIPS 140-1 Software 1.0 \n", + "926a7fc32c08e491 historical FIPS 140-2 Software 1.0 \n", + "\n", + " embodiment date_validation date_sunset \\\n", + "dgst \n", + "fe50b64954720ccb Multi-Chip Stand Alone 2008-07-24 NaT \n", + "6af1f692e9496c6d Multi-Chip Stand Alone 2002-08-01 NaT \n", + "749fc650cacb0f06 Multi-Chip Stand Alone 2002-08-01 NaT \n", + "926a7fc32c08e491 Multi-Chip Stand Alone 2008-07-24 NaT \n", + "\n", + " algorithms ... \\\n", + "dgst ... \n", + "fe50b64954720ccb {SHS#784, Triple-DES#676, DSA#292, RNG#448, Tr... ... \n", + "6af1f692e9496c6d {DSA/SHA-1#29, Triple-DES#16} ... \n", + "749fc650cacb0f06 {DSA/SHA-1#35, HMAC-SHA-1#35, Triple-DES#16} ... \n", + "926a7fc32c08e491 {RSA#371, HMAC#428, Triple-DES#675, Triple-DES... ... \n", + "\n", + " related_cves \\\n", + "dgst \n", + "fe50b64954720ccb {CVE-2004-0116, CVE-2007-1492, CVE-2011-1985, ... \n", + "6af1f692e9496c6d {CVE-2004-0116, CVE-2007-1492, CVE-2011-1985, ... \n", + "749fc650cacb0f06 {CVE-2004-0116, CVE-2007-1492, CVE-2011-1985, ... \n", + "926a7fc32c08e491 {CVE-2004-0116, CVE-2007-1492, CVE-2011-1985, ... \n", + "\n", + " module_directly_referenced_by \\\n", + "dgst \n", + "fe50b64954720ccb NaN \n", + "6af1f692e9496c6d NaN \n", + "749fc650cacb0f06 NaN \n", + "926a7fc32c08e491 NaN \n", + "\n", + " module_indirectly_referenced_by module_directly_referencing \\\n", + "dgst \n", + "fe50b64954720ccb NaN NaN \n", + "6af1f692e9496c6d NaN NaN \n", + "749fc650cacb0f06 NaN NaN \n", + "926a7fc32c08e491 NaN NaN \n", + "\n", + " module_indirectly_referencing policy_directly_referenced_by \\\n", + "dgst \n", + "fe50b64954720ccb NaN NaN \n", + "6af1f692e9496c6d NaN {433} \n", + "749fc650cacb0f06 NaN NaN \n", + "926a7fc32c08e491 NaN {2009} \n", + "\n", + " policy_indirectly_referenced_by policy_directly_referencing \\\n", + "dgst \n", + "fe50b64954720ccb NaN NaN \n", + "6af1f692e9496c6d {433} NaN \n", + "749fc650cacb0f06 NaN {106} \n", + "926a7fc32c08e491 {2009} NaN \n", + "\n", + " policy_indirectly_referencing year_from \n", + "dgst \n", + "fe50b64954720ccb NaN 2008 \n", + "6af1f692e9496c6d NaN 2002 \n", + "749fc650cacb0f06 {106} 2002 \n", + "926a7fc32c08e491 NaN 2008 \n", + "\n", + "[4 rows x 23 columns]" + ] + }, + "execution_count": 123, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "max_cpe_matches_df: DataFrame = cpe_certs_df[cpe_certs_df[\"cpe_matches\"].apply(lambda x: len(x) == maximum_cpe_matches)]\n", + "max_cpe_matches_df" + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "id": "da61d259", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>cert_id</th>\n", + " <th>name</th>\n", + " <th>status</th>\n", + " <th>standard</th>\n", + " <th>type</th>\n", + " <th>level</th>\n", + " <th>embodiment</th>\n", + " <th>date_validation</th>\n", + " <th>date_sunset</th>\n", + " <th>algorithms</th>\n", + " <th>...</th>\n", + " <th>related_cves</th>\n", + " <th>module_directly_referenced_by</th>\n", + " <th>module_indirectly_referenced_by</th>\n", + " <th>module_directly_referencing</th>\n", + " <th>module_indirectly_referencing</th>\n", + " <th>policy_directly_referenced_by</th>\n", + " <th>policy_indirectly_referenced_by</th>\n", + " <th>policy_directly_referencing</th>\n", + " <th>policy_indirectly_referencing</th>\n", + " <th>year_from</th>\n", + " </tr>\n", + " <tr>\n", + " <th>dgst</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>84bdcd156603935b</th>\n", + " <td>4150</td>\n", + " <td>Intel® Converged Security and Manageability En...</td>\n", + " <td>active</td>\n", + " <td>FIPS 140-2</td>\n", + " <td>Firmware-Hybrid</td>\n", + " <td>1.0</td>\n", + " <td>Single Chip</td>\n", + " <td>2022-02-10</td>\n", + " <td>2026-09-21</td>\n", + " <td>{DRBG#A667, AES#A668, SHS#A668, HMAC#A668, ECD...</td>\n", + " <td>...</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>{4025}</td>\n", + " <td>{4025}</td>\n", + " <td>2022</td>\n", + " </tr>\n", + " <tr>\n", + " <th>93495fae156b6769</th>\n", + " <td>3833</td>\n", + " <td>FortiGate-1101E/2000E/2201E/2500E/3301E</td>\n", + " <td>active</td>\n", + " <td>FIPS 140-2</td>\n", + " <td>Hardware</td>\n", + " <td>2.0</td>\n", + " <td>Multi-Chip Stand Alone</td>\n", + " <td>2021-03-03</td>\n", + " <td>2026-03-02</td>\n", + " <td>{HMAC#C1578, SHS#C1575, DRBG#C1571, DRBG#C1573...</td>\n", + " <td>...</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>2021</td>\n", + " </tr>\n", + " <tr>\n", + " <th>fc70db0a12d574a3</th>\n", + " <td>4142</td>\n", + " <td>Oracle Solaris Userland Cryptographic Framework</td>\n", + " <td>active</td>\n", + " <td>FIPS 140-2</td>\n", + " <td>Software</td>\n", + " <td>1.0</td>\n", + " <td>Multi-Chip Stand Alone</td>\n", + " <td>2022-02-02</td>\n", + " <td>2026-09-21</td>\n", + " <td>{SHA-3#C1914, HMAC#C1914, SHS#C1914, RSA#C1914...</td>\n", + " <td>...</td>\n", + " <td>{CVE-2016-2334, CVE-2017-3623}</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>{3335}</td>\n", + " <td>{3335}</td>\n", + " <td>2022</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9931f287c490c562</th>\n", + " <td>3618</td>\n", + " <td>Amazon Linux 2 Libgcrypt Cryptographic Module</td>\n", + " <td>active</td>\n", + " <td>FIPS 140-2</td>\n", + " <td>Software</td>\n", + " <td>1.0</td>\n", + " <td>Multi-Chip Stand Alone</td>\n", + " <td>2020-02-19</td>\n", + " <td>2025-02-18</td>\n", + " <td>{Triple-DES#C693, AES#C693, DRBG#C693, DSA#C69...</td>\n", + " <td>...</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>2020</td>\n", + " </tr>\n", + " <tr>\n", + " <th>bb551a7a1524e2ef</th>\n", + " <td>3451</td>\n", + " <td>BitLocker® Windows OS Loader (winload) in Micr...</td>\n", + " <td>active</td>\n", + " <td>FIPS 140-2</td>\n", + " <td>Software</td>\n", + " <td>1.0</td>\n", + " <td>Multi-Chip Stand Alone</td>\n", + " <td>2019-05-06</td>\n", + " <td>2024-05-05</td>\n", + " <td>{AES#5287, SHS#4240, AES#5289, RSA#2821}</td>\n", + " <td>...</td>\n", + " <td>{CVE-2019-1314}</td>\n", + " <td>{2605, 3469}</td>\n", + " <td>{2605, 2958, 2606, 3469, 3566}</td>\n", + " <td>{3447}</td>\n", + " <td>{3447}</td>\n", + " <td>{2605, 3469}</td>\n", + " <td>{2605, 2958, 2606, 3469, 3566}</td>\n", + " <td>{3447}</td>\n", + " <td>{3447}</td>\n", + " <td>2019</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>db6529e972a44a4d</th>\n", + " <td>2144</td>\n", + " <td>FortiGate-3950B/3951B</td>\n", + " <td>historical</td>\n", + " <td>FIPS 140-2</td>\n", + " <td>Hardware</td>\n", + " <td>2.0</td>\n", + " <td>Multi-Chip Stand Alone</td>\n", + " <td>2014-05-06</td>\n", + " <td>NaT</td>\n", + " <td>{Triple-DES#1425, HMAC#1616, RSA#1169, SHS#195...</td>\n", + " <td>...</td>\n", + " <td>{CVE-2012-4948}</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>2014</td>\n", + " </tr>\n", + " <tr>\n", + " <th>f1d7fa1b12bf72b9</th>\n", + " <td>3853</td>\n", + " <td>Cisco Catalyst 9300 Series Switches</td>\n", + " <td>historical</td>\n", + " <td>FIPS 140-2</td>\n", + " <td>Hardware</td>\n", + " <td>1.0</td>\n", + " <td>Multi-Chip Stand Alone</td>\n", + " <td>2021-03-18</td>\n", + " <td>NaT</td>\n", + " <td>{HMAC#C462, DSA#C431, SHS#C220, SHS#C462, Trip...</td>\n", + " <td>...</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>{3637}</td>\n", + " <td>{3637}</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>{3637}</td>\n", + " <td>{3637}</td>\n", + " <td>2021</td>\n", + " </tr>\n", + " <tr>\n", + " <th>d0c9e369bee256f4</th>\n", + " <td>2564</td>\n", + " <td>Red Hat Enterprise Linux 6.6 NSS Module</td>\n", + " <td>historical</td>\n", + " <td>FIPS 140-2</td>\n", + " <td>Software</td>\n", + " <td>2.0</td>\n", + " <td>Multi-Chip Stand Alone</td>\n", + " <td>2016-02-17</td>\n", + " <td>NaT</td>\n", + " <td>{AES#3078, AES#3082, CVL#368, HMAC#1936, CVL#3...</td>\n", + " <td>...</td>\n", + " <td>{CVE-2017-1000253, CVE-2018-1111, CVE-2016-7091}</td>\n", + " <td>{2582}</td>\n", + " <td>{2582}</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>{2582}</td>\n", + " <td>{2582}</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>2016</td>\n", + " </tr>\n", + " <tr>\n", + " <th>8a159f78a49736dc</th>\n", + " <td>3153</td>\n", + " <td>Network Security Platform Sensor NS7100, NS720...</td>\n", + " <td>historical</td>\n", + " <td>FIPS 140-2</td>\n", + " <td>Hardware</td>\n", + " <td>2.0</td>\n", + " <td>Multi-Chip Stand Alone</td>\n", + " <td>2018-03-15</td>\n", + " <td>NaT</td>\n", + " <td>{SHS#3962, CVL#1441, RSA#2638, DRBG#1679, SHS#...</td>\n", + " <td>...</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>2018</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3b769fd26d07b8da</th>\n", + " <td>3831</td>\n", + " <td>GigaVUE-HC2 Visibility Appliance</td>\n", + " <td>historical</td>\n", + " <td>FIPS 140-2</td>\n", + " <td>Hardware</td>\n", + " <td>2.0</td>\n", + " <td>Multi-Chip Stand Alone</td>\n", + " <td>2021-03-01</td>\n", + " <td>NaT</td>\n", + " <td>{HMAC#3702, SHS#2737, ECDSA#C1747, CVL#C1747, ...</td>\n", + " <td>...</td>\n", + " <td>{CVE-2020-12252, CVE-2020-12251}</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>2021</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>158 rows × 23 columns</p>\n", + "</div>" + ], + "text/plain": [ + " cert_id name \\\n", + "dgst \n", + "84bdcd156603935b 4150 Intel® Converged Security and Manageability En... \n", + "93495fae156b6769 3833 FortiGate-1101E/2000E/2201E/2500E/3301E \n", + "fc70db0a12d574a3 4142 Oracle Solaris Userland Cryptographic Framework \n", + "9931f287c490c562 3618 Amazon Linux 2 Libgcrypt Cryptographic Module \n", + "bb551a7a1524e2ef 3451 BitLocker® Windows OS Loader (winload) in Micr... \n", + "... ... ... \n", + "db6529e972a44a4d 2144 FortiGate-3950B/3951B \n", + "f1d7fa1b12bf72b9 3853 Cisco Catalyst 9300 Series Switches \n", + "d0c9e369bee256f4 2564 Red Hat Enterprise Linux 6.6 NSS Module \n", + "8a159f78a49736dc 3153 Network Security Platform Sensor NS7100, NS720... \n", + "3b769fd26d07b8da 3831 GigaVUE-HC2 Visibility Appliance \n", + "\n", + " status standard type level \\\n", + "dgst \n", + "84bdcd156603935b active FIPS 140-2 Firmware-Hybrid 1.0 \n", + "93495fae156b6769 active FIPS 140-2 Hardware 2.0 \n", + "fc70db0a12d574a3 active FIPS 140-2 Software 1.0 \n", + "9931f287c490c562 active FIPS 140-2 Software 1.0 \n", + "bb551a7a1524e2ef active FIPS 140-2 Software 1.0 \n", + "... ... ... ... ... \n", + "db6529e972a44a4d historical FIPS 140-2 Hardware 2.0 \n", + "f1d7fa1b12bf72b9 historical FIPS 140-2 Hardware 1.0 \n", + "d0c9e369bee256f4 historical FIPS 140-2 Software 2.0 \n", + "8a159f78a49736dc historical FIPS 140-2 Hardware 2.0 \n", + "3b769fd26d07b8da historical FIPS 140-2 Hardware 2.0 \n", + "\n", + " embodiment date_validation date_sunset \\\n", + "dgst \n", + "84bdcd156603935b Single Chip 2022-02-10 2026-09-21 \n", + "93495fae156b6769 Multi-Chip Stand Alone 2021-03-03 2026-03-02 \n", + "fc70db0a12d574a3 Multi-Chip Stand Alone 2022-02-02 2026-09-21 \n", + "9931f287c490c562 Multi-Chip Stand Alone 2020-02-19 2025-02-18 \n", + "bb551a7a1524e2ef Multi-Chip Stand Alone 2019-05-06 2024-05-05 \n", + "... ... ... ... \n", + "db6529e972a44a4d Multi-Chip Stand Alone 2014-05-06 NaT \n", + "f1d7fa1b12bf72b9 Multi-Chip Stand Alone 2021-03-18 NaT \n", + "d0c9e369bee256f4 Multi-Chip Stand Alone 2016-02-17 NaT \n", + "8a159f78a49736dc Multi-Chip Stand Alone 2018-03-15 NaT \n", + "3b769fd26d07b8da Multi-Chip Stand Alone 2021-03-01 NaT \n", + "\n", + " algorithms ... \\\n", + "dgst ... \n", + "84bdcd156603935b {DRBG#A667, AES#A668, SHS#A668, HMAC#A668, ECD... ... \n", + "93495fae156b6769 {HMAC#C1578, SHS#C1575, DRBG#C1571, DRBG#C1573... ... \n", + "fc70db0a12d574a3 {SHA-3#C1914, HMAC#C1914, SHS#C1914, RSA#C1914... ... \n", + "9931f287c490c562 {Triple-DES#C693, AES#C693, DRBG#C693, DSA#C69... ... \n", + "bb551a7a1524e2ef {AES#5287, SHS#4240, AES#5289, RSA#2821} ... \n", + "... ... ... \n", + "db6529e972a44a4d {Triple-DES#1425, HMAC#1616, RSA#1169, SHS#195... ... \n", + "f1d7fa1b12bf72b9 {HMAC#C462, DSA#C431, SHS#C220, SHS#C462, Trip... ... \n", + "d0c9e369bee256f4 {AES#3078, AES#3082, CVL#368, HMAC#1936, CVL#3... ... \n", + "8a159f78a49736dc {SHS#3962, CVL#1441, RSA#2638, DRBG#1679, SHS#... ... \n", + "3b769fd26d07b8da {HMAC#3702, SHS#2737, ECDSA#C1747, CVL#C1747, ... ... \n", + "\n", + " related_cves \\\n", + "dgst \n", + "84bdcd156603935b NaN \n", + "93495fae156b6769 NaN \n", + "fc70db0a12d574a3 {CVE-2016-2334, CVE-2017-3623} \n", + "9931f287c490c562 NaN \n", + "bb551a7a1524e2ef {CVE-2019-1314} \n", + "... ... \n", + "db6529e972a44a4d {CVE-2012-4948} \n", + "f1d7fa1b12bf72b9 NaN \n", + "d0c9e369bee256f4 {CVE-2017-1000253, CVE-2018-1111, CVE-2016-7091} \n", + "8a159f78a49736dc NaN \n", + "3b769fd26d07b8da {CVE-2020-12252, CVE-2020-12251} \n", + "\n", + " module_directly_referenced_by \\\n", + "dgst \n", + "84bdcd156603935b NaN \n", + "93495fae156b6769 NaN \n", + "fc70db0a12d574a3 NaN \n", + "9931f287c490c562 NaN \n", + "bb551a7a1524e2ef {2605, 3469} \n", + "... ... \n", + "db6529e972a44a4d NaN \n", + "f1d7fa1b12bf72b9 NaN \n", + "d0c9e369bee256f4 {2582} \n", + "8a159f78a49736dc NaN \n", + "3b769fd26d07b8da NaN \n", + "\n", + " module_indirectly_referenced_by module_directly_referencing \\\n", + "dgst \n", + "84bdcd156603935b NaN NaN \n", + "93495fae156b6769 NaN NaN \n", + "fc70db0a12d574a3 NaN NaN \n", + "9931f287c490c562 NaN NaN \n", + "bb551a7a1524e2ef {2605, 2958, 2606, 3469, 3566} {3447} \n", + "... ... ... \n", + "db6529e972a44a4d NaN NaN \n", + "f1d7fa1b12bf72b9 NaN {3637} \n", + "d0c9e369bee256f4 {2582} NaN \n", + "8a159f78a49736dc NaN NaN \n", + "3b769fd26d07b8da NaN NaN \n", + "\n", + " module_indirectly_referencing policy_directly_referenced_by \\\n", + "dgst \n", + "84bdcd156603935b NaN NaN \n", + "93495fae156b6769 NaN NaN \n", + "fc70db0a12d574a3 NaN NaN \n", + "9931f287c490c562 NaN NaN \n", + "bb551a7a1524e2ef {3447} {2605, 3469} \n", + "... ... ... \n", + "db6529e972a44a4d NaN NaN \n", + "f1d7fa1b12bf72b9 {3637} NaN \n", + "d0c9e369bee256f4 NaN {2582} \n", + "8a159f78a49736dc NaN NaN \n", + "3b769fd26d07b8da NaN NaN \n", + "\n", + " policy_indirectly_referenced_by policy_directly_referencing \\\n", + "dgst \n", + "84bdcd156603935b NaN {4025} \n", + "93495fae156b6769 NaN NaN \n", + "fc70db0a12d574a3 NaN {3335} \n", + "9931f287c490c562 NaN NaN \n", + "bb551a7a1524e2ef {2605, 2958, 2606, 3469, 3566} {3447} \n", + "... ... ... \n", + "db6529e972a44a4d NaN NaN \n", + "f1d7fa1b12bf72b9 NaN {3637} \n", + "d0c9e369bee256f4 {2582} NaN \n", + "8a159f78a49736dc NaN NaN \n", + "3b769fd26d07b8da NaN NaN \n", + "\n", + " policy_indirectly_referencing year_from \n", + "dgst \n", + "84bdcd156603935b {4025} 2022 \n", + "93495fae156b6769 NaN 2021 \n", + "fc70db0a12d574a3 {3335} 2022 \n", + "9931f287c490c562 NaN 2020 \n", + "bb551a7a1524e2ef {3447} 2019 \n", + "... ... ... \n", + "db6529e972a44a4d NaN 2014 \n", + "f1d7fa1b12bf72b9 {3637} 2021 \n", + "d0c9e369bee256f4 NaN 2016 \n", + "8a159f78a49736dc NaN 2018 \n", + "3b769fd26d07b8da NaN 2021 \n", + "\n", + "[158 rows x 23 columns]" + ] + }, + "execution_count": 125, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "min_cpe_matches_df: DataFrame = cpe_certs_df[cpe_certs_df[\"cpe_matches\"].apply(lambda x: len(x) == minimum_cpe_matches)]\n", + "min_cpe_matches_df" + ] + }, + { + "cell_type": "markdown", + "id": "8ffa1a12", "metadata": {}, "source": [ - "### Five most common CVEs in the dataset" + "### Ten most common CVEs in the dataset" ] }, { "cell_type": "code", "execution_count": 52, - "id": "728204b5", + "id": "b01ba099", "metadata": { "scrolled": false }, @@ -604,15 +1534,15 @@ } ], "source": [ - "cve_certs_df = df[df[\"related_cves\"].notna()]\n", + "cve_certs_df: DataFrame = df[df[\"related_cves\"].notna()]\n", "\n", "print(f\"Number of certificates with at least one CVE: {cve_certs_df.shape[0]}\")" ] }, { "cell_type": "code", - "execution_count": 63, - "id": "26f9f736", + "execution_count": 99, + "id": "da41f336", "metadata": {}, "outputs": [ { @@ -622,10 +1552,15 @@ " ('CVE-1999-0037', 45),\n", " ('CVE-2001-0889', 45),\n", " ('CVE-2007-3103', 45),\n", - " ('CVE-1999-1288', 45)]" + " ('CVE-1999-1288', 45),\n", + " ('CVE-2000-0701', 45),\n", + " ('CVE-1999-0297', 45),\n", + " ('CVE-1999-0798', 45),\n", + " ('CVE-1999-0894', 45),\n", + " ('CVE-2000-0017', 45)]" ] }, - "execution_count": 63, + "execution_count": 99, "metadata": {}, "output_type": "execute_result" } @@ -636,21 +1571,21 @@ "for cves in cve_certs_df[\"related_cves\"]:\n", " cve_counter.update(cves)\n", "\n", - "cve_counter.most_common(5)" + "cve_counter.most_common(10)" ] }, { "cell_type": "markdown", - "id": "98d90c4e", + "id": "3328d050", "metadata": {}, "source": [ - "### Five most common crypto algorithms used" + "### Ten most common crypto algorithms used" ] }, { "cell_type": "code", - "execution_count": 72, - "id": "d10b1d10", + "execution_count": 100, + "id": "feb1b151", "metadata": { "scrolled": true }, @@ -662,10 +1597,15 @@ " ('Triple-DES#34', 45),\n", " ('ECDSA#368', 35),\n", " ('AES#2273', 35),\n", - " ('DRBG#281', 35)]" + " ('DRBG#281', 35),\n", + " ('HMAC#1391', 35),\n", + " ('SHS#1954', 35),\n", + " ('Triple-DES#1420', 35),\n", + " ('DSA#709', 35),\n", + " ('RSA#1166', 35)]" ] }, - "execution_count": 72, + "execution_count": 100, "metadata": {}, "output_type": "execute_result" } @@ -676,20 +1616,12 @@ "for algorithms in df[\"algorithms\"]:\n", " crypto_algo_counter.update(algorithms)\n", "\n", - "crypto_algo_counter.most_common(5)" + "crypto_algo_counter.most_common(10)" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "35ae71e6", - "metadata": {}, - "outputs": [], - "source": [] - }, - { "cell_type": "markdown", - "id": "14c1d307", + "id": "a18d0a01", "metadata": {}, "source": [ "## Analysis of FIPS references" @@ -698,7 +1630,7 @@ { "cell_type": "code", "execution_count": 46, - "id": "b661c3ed", + "id": "ec1eb266", "metadata": {}, "outputs": [], "source": [ |
