2012-10-24

Android et le sentiment d'insécurité SSL

Hier,  Generation-NT a publié un article sur la sécurité d'Android au niveau du protocole SSL.

Si le titre "Android : des experts démontrent une sécurisation défaillante SSL" est racoleur, l'introduction est plus précise "Des experts en sécurité suggèrent que de nombreuses applications Android sécurisent mal les données sensibles malgré les protocoles de protection.".

L'étude

L'article fait écho à un article de Ars Technica basé sur l'étude de Sascha Fahl, Marian Harbach, Thomas Muders, Matthew Smith, Lars Baumgärtner et Bernd Freisleben (ou ici).  L'art d'Ars est de monter en épingle des détails de l'étude : pwn un antivirus en injectant sa propre signature dans sa base de signature de virus, vol de cookies, rejeu de requête...

Aujourd'hui il existe suffisamment d'attaques SSL simples pour ne plus se reposer uniquement sur le chiffrement de la conversation pour se sentir en sécurité.

Gestion par défaut du SSL par Android

Il est important de comprendre que par défaut les API du SDK Android lancent une "exception" si il y a un quelconque problème dans la communication SSL. Le problème peut venir d'une autorité de certification inconnue, un problème d'implémentation du protocole SSL (version, handshake) ...

Le problème le plus fréquent est l'autorité de certification inconnue. Plutôt que de payer 80€/an un certificat SSL, quelques développeurs créent leur propre autorité de certification (self-signed cert).
Comme Android refuse par défaut le certificat self-signed, le développeur adapte l'application pour qu'elle l'accepte malgré le primo-refus d'Android.

Ce mécanisme n'est pas vraiment un problème si le developpeur prend des mesures supplémentaires qu'on verra plus tard.

Détection des apps qui acceptent les self-signed


Prenons un exemple simple pour faire un HTTP GET sur Twitter en https.
Trois lignes de JAVA suffisent :
HttpGet request = new HttpGet("http://search.twitter.com/search.json?q=blue%20angels&rpp=5&include_entities=true&result_type=mixed");
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);

Maintenant ce qu'on trouve le plus communément pour un certificat self-signed, ce code est DÉCONSEILLÉ tel quel :
public static HttpClient wrapClient(HttpClient base) {
 try {
  SSLContext ctx = SSLContext.getInstance("TLS");
  X509TrustManager tm = new X509TrustManager() {

   @Override
   public void checkClientTrusted(
     java.security.cert.X509Certificate[] chain,
     String authType)
     throws java.security.cert.CertificateException {
    // TODO Auto-generated method stub

   }
   @Override
   public void checkServerTrusted(
     java.security.cert.X509Certificate[] chain,
     String authType)
     throws java.security.cert.CertificateException {
    // TODO Auto-generated method stub
   }

   @Override
   public java.security.cert.X509Certificate[] getAcceptedIssuers() {
    // TODO Auto-generated method stub
    return null;
   }
  };
  X509HostnameVerifier verifier = new X509HostnameVerifier() {

   @Override
   public boolean verify(String arg0, SSLSession arg1) {
    // TODO Auto-generated method stub
    return true;
   }

   @Override
   public void verify(String arg0, SSLSocket arg1)
     throws IOException {
    // TODO Auto-generated method stub
   }

   @Override
   public void verify(String arg0,
     java.security.cert.X509Certificate arg1)
     throws SSLException {
    // TODO Auto-generated method stub
   }

   @Override
   public void verify(String arg0, String[] arg1, String[] arg2)
     throws SSLException {
    // TODO Auto-generated method stub
    }
  };
  ctx.init(null, new TrustManager[] { tm }, null);
  SSLSocketFactory ssf = new SSLSocketFactory(ctx);
  ssf.setHostnameVerifier(verifier);
  ClientConnectionManager ccm = base.getConnectionManager();
  SchemeRegistry sr = ccm.getSchemeRegistry();
  sr.register(new Scheme("https", ssf, 443));
  return new DefaultHttpClient(ccm, base.getParams());
 } catch (Exception ex) {
  ex.printStackTrace();
  return null;
 }
}
(...)
HttpGet request = new HttpGet("http://search.twitter.com/search.json?q=blue%20angels&rpp=5&include_entities=true&result_type=mixed"
HttpClient httpClient = new DefaultHttpClient();
httpClient = wrapClient(httpClient);
HttpResponse response = httpClient.execute(request);
(...)
Soyons clairs, ce code là ne fait QUE accepter TOUS les certificats, signés ou non. Le développeur doit vérifier ensuite l'IP et/ou l'autorité ce certification et/ou le hash du certificat.

Les auteurs de l'étude ont téléchargé 13500 applications depuis le PlayStore puis les ont dé-compilé (AndroGuard+MalloDroid).
Ils ont recherché dans le code les mots clefs de la gymnastique Java nécessaire à l'acceptation des certificats self-signed (AcceptAllTrustM AllTrustM DummyTrustM EasyX509TrustM  .. page 54).

Les attaques qui marchent

Les auteurs de l'étude font un tour d'horizon des attaques SSL qui aboutissent à coup sûr lorsqu'une application désactive les erreurs SSL et qui peuvent également aboutir dans certains cas. 
  • Attaque mitm, pour man in the middle. Une machine fait proxy SSL entre Android et le serveur par exemple Twitter.com. Cette attaque fonctionne avec toutes les application "normales" et un Android configuré pour l'attaque (= l'autorité de certification utilisée par l'outil de mitm à été ajoutée dans Android).
  • Les attaques réseaux (attaque arp poison ou dns menteur ou iptables ou ...), qui renvoie vers une machine piège plutôt que la légitime. Cette attaque fonctionne dans les mêmes condition qu'une attaque mitm.
  • L'attaque sslstrip. C'est un proxy (attaque arp poison ou dns menteur ou iptables ou ...) qui piège l'utilisateur distrait qui saisi "paypal.com" dans son navigateur. Le proxy propose un faux paypal en http qui communique en httpS avec le vrai serveur "paypal.com" mais en http avec le terminal Android. Cette attaque ne fonctionne qu'avec un navigateur et par défaut avec Android.

Comment "bien" faire ?

Le point commun de toutes ces attaques est qu'une machine intermédiaire lit ce qu'il se passe.

Dans l'idéal :
  • Toute communication doit être faite en SSL
  • L'application doit vérifier l'IP résolue par le nom
  • L'application doit comparer l'autorité de certification du certificat avec une liste interne
  • L'application doit comparer le hash du certificat avec une liste interne.
  • L'application doit utiliser des tokens contre le rejeu
Les auteurs de l'étude préconisent aussi :
  • Que Google inclue un "vérificateur" d'APK basé sur MalloDroid avant de l'installer (analyse statique heuristique ou par signature)
  • HTTPS EveryWhere
  • Une distinction entre INTERNET_PLAIN et INTERNET_SSL pour informer les utilisateurs d'une probable communication "en-clair".

Conclusion

Comme écrit sur Twitter l'application analysée par mes soins la plus sérieuse est le client officiel Twitter qui, comme les autres, prête au moins un flanc aux attaques et fini par livrer en clair ses communications … et ses tokens.

2012-10-23

SMATAB 700 : installer le PlayStore

J'ai presque testé pour vous la tablette SMAT@B 700 proposée par Fiducial Office Solution, notre gentil fournituriste.

N'attendez rien d'extraordinaire pour la centaine d'euro (TTC), mais si vous souhaitez l'utiliser dans votre SI, soyez méfiants. Cette tablette est insécurisée et ne se sécurise pas.

Présentation

Ce qui ne va pas, matériellement : l'écran est salissant, la webcam est poussive, les touches physiques sont cheap, la prise USB mini-B.

Ce qui ne va pas logiciellement : pas de PlayStore, pas les Contacts Android, le launcher est peu réactif, ADB activé par défaut. Le fichier /etc/default.prop est a priori ignoré, la tablette ne peut être mise en mode "production builds".

Ce qui est susceptible de vous intéresser matériellement : un cable pour faire de l'USB-Host, une sortie hdmi, 2 modes de recharges.

Et vous intéresser  logiciellement : Android en mode débogage (= adb root), la partition /system/ montée

Activer le play store

Le PlayStore est actif mais masqué par défaut. Il existe 3 moyens d'y accéder
  1. En cherchant le mot "Play" dans la barre de recherche du launcher
  2. Par adb shell
    am start com.android.vending 
  3. Avec une application minimale

Activer les contacts

Le carnet d'adress est actif mais masqué par défaut. Il existe 3 moyens d'y accéder
  1. En cherchant le mot "Cont" dans la barre de recherche du launcher
  2. Par adb shell
    am start com.android.contacts
  3. Avec une application minimale

L'application minimale

package net.cekage.shortcut;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;

public class Shortcut extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  Intent intent = new Intent(Intent.ACTION_MAIN);
  intent.setComponent(new ComponentName("com.android.vending",
    "com.android.vending.AssetBrowserActivity"));
  startActivity(intent);
  finish();
 }
}

A acheter ou pas ?

C'est une tablette de niche, rien ne semble correctement fini :
  • hackable mais non évolutive.
  • Ouverte aux GApps mais celles-ci sont cachées. 
  • Interface tablette mais trop faible résolution, le texte est trop aliasé.
  • Autonome mais pas trop : la batterie s'épuise vite.
A mon humble avis, sa meilleure utilisation est un device d'appoint pour tester ses développements ailleurs que sur l'émulateur.

2012-10-08

stat_sys_adb en SVG


Pour le nouveau logo de adb_lock j'ai eu besoin d'utiliser les images utilisée par Android lorsque le téléphone est en mode débogage.

Si vous travaillez avec Inkscape voici un pense-bête pour les effets chez carnivora-publishing. Si vous utilisez Inkscape pour MountainLion et que libxml2 vous fait des misères, voyez chez lrem.net.

Le SVG est fait main, il n'est donc pas exactement identique à l'icône Android :

SVG file :

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   sodipodi:docname="logo-debug.svg"
   inkscape:version="0.48.2 r9819"
   version="1.1"
   id="svg2"
   height="744.09448"
   width="1052.3622"
   inkscape:export-xdpi="71.966667"
   inkscape:export-ydpi="71.966667">
  <title
     id="title36756">stat_sys_adb SVG</title>
  <sodipodi:namedview
     id="base"
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1.0"
     inkscape:pageopacity="0.0"
     inkscape:pageshadow="2"
     inkscape:zoom="0.16136213"
     inkscape:cx="-1335.2764"
     inkscape:cy="-427.65272"
     inkscape:document-units="px"
     showgrid="false"
     showguides="true"
     inkscape:guide-bbox="true"
     inkscape:window-width="1440"
     inkscape:window-height="821"
     inkscape:window-x="194"
     inkscape:window-y="15"
     inkscape:window-maximized="0"
     inkscape:current-layer="layer4" />
  <defs
     id="defs4" />
  <metadata
     id="metadata7">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
        <dc:title>stat_sys_adb SVG</dc:title>
        <dc:date>2012-10-07</dc:date>
        <dc:creator>
          <cc:Agent>
            <dc:title>CeKaGe</dc:title>
          </cc:Agent>
        </dc:creator>
        <dc:rights>
          <cc:Agent>
            <dc:title>http://sam.zoy.org/wtfpl/COPYINGs</dc:title>
          </cc:Agent>
        </dc:rights>
        <dc:publisher>
          <cc:Agent>
            <dc:title>CeKaGe</dc:title>
          </cc:Agent>
        </dc:publisher>
        <dc:language>fr_FR</dc:language>
        <dc:description>Entirely based on Android SDK icon stat_sys_adb.png</dc:description>
        <cc:license
           rdf:resource="http://sam.zoy.org/wtfpl/COPYING" />
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <g
     inkscape:label="ronds"
     id="layer4"
     inkscape:groupmode="layer"
     transform="translate(0,-308.2677)">
    <path
       inkscape:connector-curvature="0"
       id="stat_sys_adb_ICS"
       d="m 129.8507,642.21771 c -1.56864,0.0448 -3.2899,0.50893 -5.2016,1.42102 -9.03946,8.14097 5.74203,15.8443 8.88078,28.31903 -4.65862,7.40003 -39.088256,21.29558 -41.003826,68.41228 l 187.714306,-0.12688 c -3.76065,-34.15455 -14.14904,-49.52154 -40.52173,-68.00627 2.70742,-13.78943 14.50986,-14.54933 8.17032,-28.87729 -14.79482,-5.29954 -15.44999,10.49324 -23.01391,20.12275 l -76.60307,0.81202 c -5.88875,-10.99361 -9.9506,-22.3189 -18.42127,-22.07666 z m 16.97498,46.53862 c 6.60523,0 11.95099,5.11722 11.95099,11.44434 0,6.32711 -5.34576,11.46971 -11.95099,11.46971 -6.60525,0 -11.97637,-5.1426 -11.97637,-11.46971 0,-6.32712 5.37112,-11.44434 11.97637,-11.44434 z m 47.42336,0.76126 c 6.30715,0 11.41815,4.93475 11.41815,11.03833 0,6.10359 -5.111,11.06371 -11.41815,11.06371 -6.30716,0 -11.41815,-4.96012 -11.41815,-11.06371 0,-6.10358 5.11099,-11.03833 11.41815,-11.03833 z M 50.278914,749.80972 c -9.76592,0 -17.63469,7.86933 -17.63469,17.63595 l 0,96.70596 c 0,9.76659 7.86877,17.6105 17.63469,17.6105 l 9.08377,0 c 9.76592,8e-5 17.60932,-7.84391 17.60932,-17.6105 l 0,-96.70596 c 0,-9.76662 -7.8434,-17.63595 -17.60932,-17.63595 l -9.08377,0 z m 262.820336,0 c -9.76592,0 -17.63469,7.86933 -17.63469,17.63595 l 0,96.70596 c 0,9.76659 7.86877,17.6105 17.63469,17.6105 l 9.05839,0 c 9.76592,8e-5 17.63469,-7.84391 17.63469,-17.6105 l 0,-96.70596 c 0,-9.76662 -7.86877,-17.63595 -17.63469,-17.63595 l -9.05839,0 z m -187.51133,4.28845 c -18.64403,0 -33.645456,14.05482 -33.645456,31.51634 l 0,173.08606 c 0,17.46181 15.001426,31.51625 33.645456,31.51645 l 92.41086,0 c 0.0114,-9.51019 2.16996,-16.34988 2.23288,-25.85768 0.72073,-8.80054 7.65517,-17.57534 16.46751,-17.40758 5.16247,0.0138 11.91344,-1.59877 17.07647,-1.59861 0.0115,-8.97699 -1.55644,-15.81684 -1.49705,-24.79188 0.72073,-8.80054 7.65517,-17.601 16.46751,-17.43291 2.63471,0.008 5.71079,-0.17597 9.08376,-0.45684 l 0,-117.05701 c 0,-17.46152 -15.00144,-31.51634 -33.64546,-31.51634 l -118.59648,0 z m 2.10602,14.41327 69.52382,0 c 10.92892,0 19.89022,12.28426 19.71533,27.53239 l -1.0657,93.15335 c -32.68796,-0.87381 -31.83327,22.79221 -29.05283,42.07254 -23.12641,0.0674 -34.62109,8.71097 -34.33056,42.90997 l -27.4543,0.53284 c -10.92687,0.21259 -17.05109,-12.25794 -17.05109,-27.50701 l 0,-151.16169 c 0,-15.24914 8.7864,-27.53239 19.71533,-27.53239 z m 58.10567,33.82551 0,15.68204 15.96003,0 0,-15.68204 -15.96003,0 z m -62.36845,0.0253 0,15.68205 15.7063,0 0,-15.68205 -15.7063,0 z m 31.28572,31.33872 0,15.93582 15.85854,0 0,-15.93582 -15.85854,0 z m 31.2096,31.23719 0,15.68204 15.83316,0 0,-15.68204 -15.83316,0 z m -62.67293,0.0503 0,15.68205 15.70629,0 0,-15.68205 -15.70629,0 z m 31.36184,31.36409 0,15.52979 15.73167,0 0,-15.52979 -15.73167,0 z m -31.26035,31.33875 0,15.75813 15.78242,0 0,-15.75813 -15.78242,0 z"
       style="color:#000000;fill:#33b5e5;fill-opacity:1;stroke:#33b5e5;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
       inkscape:label="#path5309"
       inkscape:export-xdpi="72"
       inkscape:export-ydpi="72" />
    <path
       style="fill:#33b5e5;fill-opacity:1;fill-rule:nonzero;stroke:none"
       d="m 926.06018,714.17829 c -27.22353,-12.00453 -30.55244,42.51128 -35.0691,41.25189 -34.67205,-9.66763 -80.71112,-7.81977 -122.07702,0.004 -22.48447,4.25265 -58.38589,14.8761 -78.22496,24.33748 -12.49865,-4.28099 -28.95334,-49.73487 -48.87993,-33.00071 -11.57241,15.98748 24.68234,50.79657 18.2805,60.47016 -25.23911,38.13797 -41.05442,21.97111 -42.4231,98.3444 -0.91334,50.967 32.22027,108.49709 134.71262,86.42742 19.67802,-4.23735 35.50576,-9.52521 56.73124,-9.60298 39.57385,-0.14536 96.83676,7.89129 121.02155,-5.93925 44.38563,-25.38236 59.22363,-62.1197 59.55063,-97.34376 0.5,-53.86529 -37.73872,-93.1189 -71.35197,-110.15389 17.36884,-34.1089 21.90616,-48.65518 7.72954,-54.79446 z m -61.41404,109.33792 c 8.51986,0 15.42657,6.38378 15.42657,14.23102 0,7.84725 -6.90671,14.19246 -15.42657,14.19246 -8.51987,0 -15.42659,-6.34521 -15.42659,-14.19246 0,-7.84724 6.90672,-14.23102 15.42659,-14.23102 z m -134.78976,8.94742 c 8.96828,0 16.23648,5.98373 16.23648,13.38256 0,7.39884 -7.2682,13.38256 -16.23648,13.38256 -8.96828,0 -16.23647,-5.98372 -16.23647,-13.38256 0,-7.39883 7.26819,-13.38256 16.23647,-13.38256 z"
       id="stat_sys_adb_JB"
       inkscape:connector-curvature="0"
       sodipodi:nodetypes="cssccssscssccssssssssss"
       inkscape:label="#path4733"
       inkscape:export-xdpi="72"
       inkscape:export-ydpi="72" />
    <path
       sodipodi:nodetypes="cccccccccccccscccsssssssssssssssssscccccccccccccccccccccccccccccsssscccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
       inkscape:connector-curvature="0"
       id="stat_sys_adb_GB"
       d="m 451.07406,339.14504 c -0.86677,-0.019 -1.73909,0.2364 -2.48694,0.75793 l -2.65279,1.84748 c -1.99436,1.39066 -2.38174,4.23619 -0.8764,6.3951 l 21.19861,30.43591 c -28.23061,17.45288 -48.75443,48.92262 -48.55539,93.32118 l 208.45656,-0.30795 c 0.25588,-45.60482 -19.65614,-76.72416 -47.20527,-93.70008 l 20.74855,-29.74906 c 1.50534,-2.15891 1.11796,-5.00444 -0.8764,-6.3951 l -2.65279,-1.84748 c -1.99436,-1.39066 -4.81866,-0.78514 -6.324,1.37377 l -21.53021,30.90961 c -14.49958,-6.66462 -30.50231,-9.86084 -46.47107,-9.63998 -15.42556,0.21336 -30.85702,3.68714 -44.93147,10.27953 l -22.00393,-31.54916 c -0.94082,-1.34928 -2.39243,-2.10033 -3.83706,-2.1317 z m 26.52783,55.40048 12.60072,0 c 2.43131,0 4.40551,2.1289 4.40551,4.76084 l 0,25.53303 c 0,2.63194 -1.9742,4.73712 -4.40551,4.73712 l -12.60072,0 c -2.43131,0 -4.38179,-2.10518 -4.38179,-4.73712 l 0,-25.53303 c 0,-2.63194 1.95048,-4.76084 4.38179,-4.76084 z m 75.79379,0 12.60072,0 c 2.43131,0 4.40552,2.1289 4.40552,4.76084 l 0,25.53303 c 0,2.63194 -1.97421,4.73712 -4.40552,4.73712 l -12.60072,0 c -2.43131,0 -4.38179,-2.10518 -4.38179,-4.73712 l 0,-25.53303 c 0,-2.63194 1.95048,-4.76084 4.38179,-4.76084 z m -167.81215,86.92609 c -2.52629,-0.008 -5.01801,0.61809 -7.55573,0.5921 -4.81321,0.23374 -9.63241,0.22571 -14.4482,0.37897 -6.19591,0.10959 -11.13138,5.0778 -13.33493,10.54011 -1.92455,4.95092 -2.68818,10.66388 -0.92377,15.77458 1.15994,3.3294 4.16775,6.32984 7.91097,6.15825 4.53672,0 8.14094,-3.09709 11.96125,-5.06871 7.5555,-3.03979 16.32197,-0.42498 22.40654,4.57135 3.49424,1.85331 7.59204,-0.15273 10.01895,-2.84227 2.41131,-2.45276 3.82251,-5.82763 3.64758,-9.28474 -0.10179,-10.12188 -8.36468,-19.85441 -18.59313,-20.77227 -0.36244,-0.0303 -0.72868,-0.0462 -1.08953,-0.047 z m 286.23994,0 c -2.52621,-0.008 -5.01793,0.61809 -7.55566,0.5921 -4.81321,0.23374 -9.63248,0.22571 -14.44819,0.37897 -6.19591,0.10959 -11.1551,5.07788 -13.35865,10.54011 -1.92456,4.95092 -2.66454,10.66388 -0.90006,15.77458 1.15988,3.32947 4.16775,6.32977 7.91098,6.15825 4.53671,0 8.14094,-3.09701 11.96117,-5.06871 7.55558,-3.03971 16.29832,-0.42498 22.38289,4.57135 3.49425,1.85331 7.61569,-0.1528 10.04268,-2.84227 2.41131,-2.45284 3.82243,-5.82771 3.64758,-9.28474 -0.10179,-10.12196 -8.36468,-19.85441 -18.5932,-20.77227 -0.36245,-0.0303 -0.72861,-0.0462 -1.08954,-0.047 z m -254.14605,1.94221 0,21.17489 0,29.22798 -0.41989,100.61763 c -0.0493,11.72007 22.47195,34.13191 34.19209,34.16845 l 134.89135,0.41989 c 11.72022,0.0364 37.75447,-21.61002 37.94766,-33.32865 l 1.67959,-101.87732 0,-29.22798 0,-21.17489 -21.15116,0 -165.96475,0 z m -32.09389,48.53175 c -2.52629,-0.008 -5.01801,0.6181 -7.55573,0.5921 -4.81321,0.23375 -9.63241,0.22572 -14.4482,0.37897 -6.19591,0.1096 -11.13138,5.07781 -13.33493,10.54011 -1.92455,4.95093 -2.68818,10.66389 -0.92377,15.77459 1.15994,3.32939 4.16775,6.32977 7.91097,6.15817 4.53672,0 8.14094,-3.09701 11.96125,-5.06864 7.5555,-3.03978 16.32197,-0.42505 22.40654,4.5712 3.49424,1.85331 7.59204,-0.15272 10.01895,-2.84219 2.41131,-2.45269 3.82251,-5.82763 3.64758,-9.28474 -0.10179,-10.12188 -8.36468,-19.85433 -18.59313,-20.7722 -0.36244,-0.0303 -0.72868,-0.047 -1.08953,-0.047 z m 286.23994,0 c -2.52621,-0.008 -5.01793,0.6181 -7.55566,0.5921 -4.81321,0.23375 -9.63248,0.22572 -14.44819,0.37897 -6.19591,0.10952 -11.1551,5.07781 -13.35865,10.54011 -1.92456,4.95093 -2.66454,10.66389 -0.90006,15.77459 1.15988,3.32939 4.16775,6.32977 7.91098,6.15817 4.53671,0 8.14094,-3.09701 11.96117,-5.06864 7.55558,-3.03978 16.29832,-0.42505 22.38289,4.5712 3.49425,1.85331 7.61569,-0.15272 10.04268,-2.84219 2.41131,-2.45269 3.82243,-5.82763 3.64758,-9.28474 -0.10179,-10.12196 -8.36468,-19.85441 -18.5932,-20.7722 -0.36245,-0.0303 -0.72861,-0.047 -1.08954,-0.047 z m -286.23994,50.47382 c -2.52629,-0.008 -5.01801,0.61817 -7.55573,0.59217 -4.81321,0.23375 -9.63241,0.22572 -14.4482,0.37897 -6.19591,0.1096 -11.13138,5.07781 -13.33493,10.54012 -1.92455,4.95085 -2.68818,10.6638 -0.92377,15.7745 1.15994,3.32947 4.16775,6.35357 7.91097,6.18197 4.53672,0 8.14094,-3.12081 11.96125,-5.09236 7.5555,-3.03986 16.32197,-0.42505 22.40654,4.57128 3.49424,1.85331 7.59204,-0.15272 10.01895,-2.84227 2.41131,-2.45276 3.82251,-5.82763 3.64758,-9.28474 -0.10179,-10.12188 -8.36468,-19.85441 -18.59313,-20.7722 -0.36244,-0.0303 -0.72868,-0.047 -1.08953,-0.0478 z m 286.23994,0 c -2.52621,-0.008 -5.01793,0.61817 -7.55566,0.59217 -4.81321,0.23375 -9.63248,0.22572 -14.44819,0.37897 -6.19591,0.1096 -11.1551,5.07781 -13.35865,10.54012 -1.92456,4.95085 -2.66454,10.6638 -0.90006,15.7745 1.15988,3.32947 4.16775,6.35357 7.91098,6.18197 4.53671,0 8.14094,-3.12081 11.96117,-5.09236 7.55558,-3.03986 16.29832,-0.42505 22.38289,4.57128 3.49425,1.85331 7.61569,-0.15272 10.04268,-2.84227 2.41131,-2.45276 3.82243,-5.82763 3.64758,-9.28474 -0.10179,-10.12188 -8.36468,-19.85441 -18.5932,-20.7722 -0.36245,-0.0303 -0.72861,-0.047 -1.08954,-0.0478 z"
       style="opacity:0.91588780999999997;fill:#99cc00;fill-opacity:1;fill-rule:nonzero;stroke:#99cc00;stroke-width:0;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:50"
       inkscape:label="#rect4314"
       inkscape:export-xdpi="72"
       inkscape:export-ydpi="72" />
  </g>
</svg>